2011-05-11 182 views
4

我想将日文字符传递给SQL Server中的存储过程。字符被转换为????在执行期间,因此我得到incoreect结果。将日文字符传递给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,"'[email protected]+'"))'
然后在查询中使用它。像
select * from TABLE as TEMP INNERJOIN CONTAINSTABLE(#,#,@string) ......
请参阅MSDN或相关的文档

+0

是否可以添加TSQL在您的存储过程?它会像发送它的变量不支持unicode一样简单吗?或者,也许变量返回结果? – 2011-05-11 20:39:09

+0

您的存储过程的输入参数是否为nvarchar类型的输入参数,并且您确定它在过程中的任何位置没有被(隐式)转换为非Unicode(varchar)? – Triynko 2011-05-11 20:41:12

+0

所以 - 再次 - **什么**不起作用?你没有收回任何东西?你回来了错误的信息?你的表结构是什么样的?您的表NVARCHAR中的“标题”列也是? – 2011-05-11 21:05:03

回答

7

你一定要使用NVARCHAR为您的数据类型,如果你在SQL服务器管理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 

,当然,这将是更好,如果我知道如何在这里得到一些日本字符.... :-)

更新: OK,我挑选了一些随机西里尔语和泰国语字符,我敢肯定需要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 
+2

它如何“不起作用”? ....你检查了所有方面 - 'NVARCHAR'类型,'N'...''前缀你可以**向我们展示**你的存储过程? – 2011-05-11 20:43:17

+0

对不起,abt ..更新了问题。非常感谢marc ...请看问题 – Tom 2011-05-11 20:58:51

相关问题