我試圖連接SET @WhereClause= @WhereClause + 'con.BusinessName LIKE ' + '%'+CONVERT(VARCHAR,@BusinessName) + '%' + ' AND ';
這一行。如何連接Where子句與Like
我想造成這樣SET @WhereClause= con.BusinessName LIKE '%Hello%' AND ';
我試圖連接SET @WhereClause= @WhereClause + 'con.BusinessName LIKE ' + '%'+CONVERT(VARCHAR,@BusinessName) + '%' + ' AND ';
這一行。如何連接Where子句與Like
我想造成這樣SET @WhereClause= con.BusinessName LIKE '%Hello%' AND ';
你確實應該使用的參數。但是,你需要單引號:
'''%'+CONVERT(VARCHAR(255), @BusinessName) + '%'''
你還應該指定長度VARCHAR()
在SQL Server中。默認情況因上下文而異,調試問題可能相當困難。
注意:如果@BusinessName
有單引號,這將失敗。想想:參數。
此外,您還可以使用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
。所以,你應該關心這個邊緣情況。
Thank @Gordon Linoff –