我正在尝试将日语字符传递给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或相关文档
答案 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