SQL Server动态存储过程 - 将参数值传递给类似搜索

时间:2014-12-06 06:57:55

标签: sql-server stored-procedures dynamic

我有一个users表,其中categories列带有分隔值。

我正在尝试传递一个类别,并使用动态SQL中的users表执行类似的搜索。

类别值是参数化的。

DECLARE @SQLQuery AS NVARCHAR(4000)
DECLARE @ParamDef AS NVARCHAR(2000) 

SET @ParamDef = '@category VARCHAR(100)'

SET @SQLQuery = 'UPDATE [U]
                 SET [U].[status] = 1
                 FROM [dbo].[users] AS [U]
                 WHERE [U].[categories] LIKE ??

EXECUTE SP_EXECUTESQL @SQLQuery ,@ParamDef ,@category   

我希望我的搜索功能可以检查%,@ category,%

2 个答案:

答案 0 :(得分:0)

你是否试图像这样形成查询?

DECLARE @SQLQuery AS NVARCHAR(4000)
DECLARE @ParamDef AS NVARCHAR(2000) 

SET @ParamDef = '@category VARCHAR(100)'

SET @SQLQuery = 'UPDATE [U]
             SET [U].[status] = 1
             FROM [dbo].[users] AS [U]
             WHERE [U].[categories] LIKE '''+ '%' + @category + '%' + ''''

EXECUTE SP_EXECUTESQL @SQLQuery ,@ParamDef ,@category   

如果有帮助,请告诉我。 谢谢 阿什拉夫

答案 1 :(得分:0)

您是否必须使用动态SQL?它易受SQL注入的影响,特别是如果您在UI中使用@category。

您可以改为使用以下内容来完成相同的操作:

DECLARE @category VARCHAR(100)

UPDATE [U]
SET [U].[status] = 1
FROM [dbo].[users] AS [U]
WHERE [U].[categories] LIKE '%,' + @category + ',%'

否则,您似乎已经使用动态SQL找到了解决方案。