SQL Server 2005 CodePage Проблема - PullRequest
2 голосов
/ 05 января 2010

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

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

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

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

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 05 января 2010

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

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

В противном случае, посмотрите на предложения COLLATE, чтобы привести данные?

Edit:

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

0 голосов
/ 16 февраля 2010

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

...