Передача японских символов в хранимую процедуру SQL Server - PullRequest
4 голосов
/ 12 мая 2011

Я пытаюсь передать японские символы в хранимую процедуру в SQL Server. Персонажи превращаются в ???? во время выполнения и, следовательно, я получаю неправильные результаты.

Как мне передать им таких персонажей? Я пытался использовать nvarchar, так как он принимает Unicode, но не повезло. Если я не использую хранимую процедуру и динамически создаю строку SQL-запроса в моем приложении, все работает нормально. Пожалуйста, помогите

Обновление

declare @string as nvarchar(1000)
SET @string = @keyword 
SELECT * FROM TABLE where Title like @string 

Вызывается с помощью

EXEC @return_value = StoredProcName 
@keyword = N'Japanese Word' 

Обновление 2

Я хотел бы добавить следующее, если это поможет. Построение запроса динамически работает. Так что, если в вашем приложении вы должны были написать sql = "выберите * из таблицы, где заголовок, как '" + [JapaneseWord] + "'"; оно работает. Я не могу определить, где происходит сбой Unicode для сохраненного процесса

Решение

NVARCHAR является ключом к проблеме. Если кому-то интересно узнать, как использовать его для формирования строки поиска в свободном тексте, то вы идете

declare @string as nvarchar(100) set @string = 'FORMSOF(INLFLECTIONAL,"'+@string+'"))'
Тогда используйте это в своем запросе. Как
select * from TABLE as TEMP INNERJOIN CONTAINSTABLE(#,#,@string) ......
См. MSDN или соответствующие документы

1 Ответ

7 голосов
/ 12 мая 2011

Вам определенно нужно использовать NVARCHAR в качестве типа данных, и если вы запускаете его в SQL-сервере Mgmt Studio или из «встроенного» SQL-запроса, вам необходимо убедиться, что префикс строковых литералов равен N'.....' приставка.

Итак, ваш сохраненный процесс должен выглядеть примерно так:

CREATE PROCEDURE dbo.YourProc  @Param1 NVARCHAR(100)
AS
   SELECT N'Test - [' + @Param1 + N'] - end of test'

И затем вызвать это, используя:

EXEC dbo.YourProc   N'foo-bar-value'

Должен дать:

Test - [foo-bar-value] - end of test

и, конечно, было бы намного лучше, если бы я знал, как добавить сюда некоторые японские символы ....: -)

Обновление: ОК, я выбрал несколько случайных кириллических и тайских символов, которые, как я уверен, тоже требуют NVARCHAR - и мне кажется, что это работает:

EXEC dbo.YourProc   N'Є Ї Љ Њ Ќ Ѝ Ў А Й Ж М Р Б'

Test - [Є Ї Љ Њ Ќ Ѝ Ў А Й Ж М Р Б] - end of test

EXEC dbo.YourProc   N'฿ ᴂ ᴆ ᴌ ᴔ ᴓ ᴙ ᴚ ᴝ ᴭ ᴦ ᴣ ᴟ'

Test - [฿ ᴂ ᴆ ᴌ ᴔ ᴓ ᴙ ᴚ ᴝ ᴭ ᴦ ᴣ ᴟ] - end of test

Не уверен, почему этот тест на основе Unicode будет работать, и почему он не должен работать с японскими символами ....

Обновление № 2: спасибо за Википедию - это, как говорят, означает "Токио", в Хирагане - кажется, работает для меня:

EXEC dbo.YourProc   N'とうきょう'

Test - [とうきょう] - end of test
...