2017-07-29 100 views
0

我試圖連接SET @WhereClause= @WhereClause + 'con.BusinessName LIKE ' + '%'+CONVERT(VARCHAR,@BusinessName) + '%' + ' AND ';這一行。如何連接Where子句與Like

我想造成這樣SET @WhereClause= con.BusinessName LIKE '%Hello%' AND ';

回答

1

你確實應該使用的參數。但是,你需要單引號:

'''%'+CONVERT(VARCHAR(255), @BusinessName) + '%''' 

你還應該指定長度VARCHAR()在SQL Server中。默認情況因上下文而異,調試問題可能相當困難。

注意:如果@BusinessName有單引號,這將失敗。想想:參數。

+0

Thank @Gordon Linoff –

0

此外,您還可以使用QUOTENAME功能(SQL Server 2008和以上):

SET @WhereClause = @WhereClause + 'con.BusinessName LIKE ' + QUOTENAME('%' + CONVERT(varchar(126), @BusinessName) + '%', '''') + ' AND ';

隨着QUOTENAME功能就可以避免你的代碼打破時@BusinessName包含單引號字符,並消除的可能性SQL注入攻擊也是如此(例如,如果@BusinessName直接從UI獲取其值,通過Web應用程序/ API中的查詢參數或請求主體等)。

QUOTENAME用於在動態SQL中生成有效的分隔標識符,但它可以用於您的情況。

該函數接受nvarchar(128)作爲輸入字符串,並且如果@BusinessName大於126個字符(128個減二%字符)時間越長,將返回NULL。所以,你應該關心這個邊緣情況。