Sql-Server-2012

sp_executesql 將非標準字元更改為?

  • April 11, 2018

我正在嘗試使用sp_executesql來執行命令,但我遇到了一個問題,即非英文字元(又名中文和日文)更改為 ??? 跑的時候。

sql server 2008R2 & 2012

範常式式碼

DECLARE @text nvarchar(30) = N'select ''J こんにちは C 你好''' 
SELECT @text 
SELECT N'J こんにちは C 你好'
exec sp_executesql @text
exec sp_executesql  N'select ''J こんにちは C 你好'''

J= 日文 ‘Hi’ C = 中文 ‘Hi’ 由Google翻譯處理以用於測試目的

輸出

------------------------------
select 'J こんにちは C 你好'

------------
J こんにちは C 你好

------------
J ????? C ??

------------
J ????? C ??

如您所見,當自然執行或選擇程式碼時,輸出按預期返回,但是一旦通過 sp_executesql 它返回為?人物。值得注意的是,如果您嘗試發送 varchar 而不是 nvarchar 它會出錯,因此它挑釁地使用 unicode。

為輸入嘗試了幾種不同的排序規則,但這似乎並沒有改變任何東西

您應該使用SELECT 在 SELECT中傳遞您的 unicode 字元:UNICODE``N

DECLARE @text nvarchar(30) = N'select N''J こんにちは C 你好''' 
SELECT @text 
SELECT N'J こんにちは C 你好'
exec sp_executesql @text
exec sp_executesql  N'select N''J こんにちは C 你好'''

引用自:https://dba.stackexchange.com/questions/203587