2017-07-08 53 views
0

我需要做的是這樣的:SQL服務器:指定字符串文字的參數

EXEC sp_ExecuteSQL N'select * from Members where Name like @pat', 
    N'@pat nvarchar(max)', @pat=Tom 

我的問題是關於最後一個參數。

當要分配的值是一個「簡單」字符串,即沒有空格等,我可以使用類似@pat=Tom,不需要引號。

但是,當分配的值以%字符結尾時,例如它不起作用,我必須執行類似@pat=N'Tom%'的操作。

這是如何定義分配字符串文字的語法?

這是否也意味着如果我的值包含單引號,我將不得不手動轉義它?

+0

我真的很驚訝'@ pat = Tom'不會失敗,因爲MS文檔說它應該是'@param ='value'',其中'該值可以是Unicode常量或Unicode變量',Tom是既不恆定也不變。 – Serg

+0

它是如何工作的http://rextester.com/UACGW14527我期望它會拋出無效的標識符錯誤 –

+0

令人驚訝的是,@ pat = Tom沒有單引號。 – Wendy

回答

0

我很驚訝它沒有引號。這必須是exec的特性。

始終包括單引號:

EXEC sp_ExecuteSQL N'select * from Members where Name like @pat', 
    N'@pat nvarchar(max)', @pat='Tom'; 

按照documentation

如果參數的值是一個對象的名稱,字符串,或 由數據庫合格名稱或模式名稱,全名必須是 ,單引號。如果參數的值是關鍵字 ,則該關鍵字必須用雙引號括起來。

我不知道爲什麼它會在沒有單引號的情況下工作。