2010-01-05 3 views
2

У меня проблема, которую я пытаюсь решить. У нас есть SQL Server 2005 с коммерческой системой ERP. Следствием этого является то, что мы не можем изменить структуру базы данных, а все поля символов - CHAR или VARCHAR, а не типы Unicode (NCHAR, NVARCHAR).SQL Server 2005 CodePage Issue

У нас также есть несколько экземпляров программного обеспечения ERP, основанного на стране. Каждая страна имеет собственную базу данных на том же сервере базы данных, что приводит к изменениям в именах таблиц на основе экземпляра программного обеспечения ERP, которое работает. Например, таблица клиентов США называется US_CUSTOMER, а Великобритания - GB_CUSTOMER. Мы создали отдельную базу данных, которая по существу отражает системные таблицы ERP с синонимами, а затем представления, которые обрабатывают все наши транзакции SQL против этих синонимов. Это было сделано для использования LINQ TO SQL. Спасибо за прочтение этого момента :)

Проблема, которую мы имеем, заключается в том, что мы сейчас внедряем упрощенный китайский язык для приложения. В ERP-системе клиента они устанавливают кодовую страницу для системы ERP, так что, когда система ERP записывает в базовые таблицы, данные записываются как многобайтовые. Мой вопрос в том, как я могу получить эту многобайтную информацию, переведенную на упрощенный китайский? Я хотел бы иметь возможность сделать это на уровне базы данных, так как у меня есть как веб-приложение, так и отчеты SSRS, которые должны использовать его.

Есть идеи или направления? Я не думаю, что могу изменить кодовую страницу, поскольку несколько стран используют один и тот же сервер базы данных (хотя разные базы данных).

Благодаря загодя

ответ

0

То, что мы в конечном итоге делаем для этого написания функции CLR, которая может быть вызвана из нашего SQL заявления. Мы передаем строку и желаемую кодовую страницу и получаем преобразованную строку. Производительность - это не то, на что мы надеялись, но это был единственный путь, который мы могли найти.

1

ли мы говорим, что 2 VARCHAR символы быть используют для хранения 1 юникода характер?

Если это так, попробуйте CAST для двоичного кода в NVARCHAR и т.д. (или что-то подобное)

В противном случае, смотреть на СОРТ- пунктах принуждать данных?

Edit:

функция А CLR может быть вашей только ставка, чтобы использовать предложение Ремуса из MultiByteToWideChar

+0

Да, два символа varchar для сохранения 1 символа Юникода. –

+1

cast Я не думаю, что это сработает. Он будет передавать каждый отдельный байт в многобайтном наборе в его уникодовый эквивалент. Правильный перевод осуществляется через «MultiByteToWideChar» http://msdn.microsoft.com/en-us/library/cc500362.aspx, и я не думаю, что эта функция доступна в виде T-SQL –

+0

@Remus: это был long shot anyway ,,, – gbn