将日语字符传递给SQL Server存储过程

时间:2011-05-11 20:37:01

标签: sql sql-server stored-procedures unicode

我正在尝试将日语字符传递给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 =“select * from TABLE where Title like'”+ [JapaneseWord] +“'”; 有用。我无法确定Unicode存储过程失败的位置

解决方案

NVARCHAR是问题的关键。如果有人有兴趣知道如何使用它来形成一个自由文本搜索字符串,那么你去

declare @string as nvarchar(100) set @string = 'FORMSOF(INLFLECTIONAL,"'+@string+'"))'
然后在查询中使用它。像
 select * from TABLE as TEMP INNERJOIN CONTAINSTABLE(#,#,@string) ......
请参阅MSDN或相关文档

1 个答案:

答案 0 :(得分:7)

您肯定需要使用NVARCHAR作为数据类型,如果在SQL Server Mgmt Studio或“内联”SQL查询中运行此操作,则需要确保在字符串文字前加上{ {1}}前缀。

因此,您的存储过程应该类似于:

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 - 而且在我看来它有效:< / p>

NVARCHAR

不确定为什么这个基于Unicode的测试会起作用,以及为什么它不适用于日文字符....

更新#2:感谢维基百科 - 据说这意味着“东京”,在平假名 - 似乎对我有用:

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

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

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

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