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

Tom*_*Tom 4 sql sql-server unicode stored-procedures

我正在尝试将日语字符传递给SQL Server中的存储过程.字符转换为???? 在执行期间,因此我获得了结果.

我如何传递这些角色?我尝试使用nvarchar它接受Unicode,但没有运气.如果我不使用存储过程并在我的应用程序中动态构造SQL查询字符串,一切正常.请帮助

更新

declare @string as nvarchar(1000)
SET @string = @keyword 
SELECT * FROM TABLE where Title like @string 
Run Code Online (Sandbox Code Playgroud)

叫做使用

EXEC @return_value = StoredProcName 
@keyword = N'Japanese Word' 
Run Code Online (Sandbox Code Playgroud)

更新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或相关文档

mar*_*c_s 7

您肯定需要使用NVARCHAR您的数据类型,如果您在SQL Server Mgmt Studio或"内联"SQL查询中运行它,您需要确保在字符串文字前面加上N'.....'前缀.

所以,你的存储过程看起来应该是这样的:

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

然后使用以下方法调用:

EXEC dbo.YourProc   N'foo-bar-value'
Run Code Online (Sandbox Code Playgroud)

应该产量:

Test - [foo-bar-value] - end of test
Run Code Online (Sandbox Code Playgroud)

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

更新:好的,我已经选择了一些随机的西里尔字母和泰文字符,我NVARCHAR也是正面要求的- 而且在我看来它可行:

EXEC dbo.YourProc   N'? ? ? ? ? ? ? ? ? ? ? ? ?'

Test - [? ? ? ? ? ? ? ? ? ? ? ? ?] - end of test

EXEC dbo.YourProc   N'? ? ? ? ? ? ? ? ? ? ? ? ?'

Test - [? ? ? ? ? ? ? ? ? ? ? ? ?] - end of test
Run Code Online (Sandbox Code Playgroud)

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

更新#2:感谢维基百科 - 这被认为意味着"东京",在平假名 - 似乎对我有用:

EXEC dbo.YourProc   N'?????'

Test - [?????] - end of test
Run Code Online (Sandbox Code Playgroud)

  • 它是如何"不工作"的?....你检查了所有方面 - "NVARCHAR"类型,"N"......前缀?你能告诉我们**你的存储过程吗? (2认同)