【问题标题】:SQL Server dynamic stored procedure - passing parameter value to like searchSQL Server 动态存储过程 - 将参数值传递给喜欢搜索
【发布时间】:2015-02-04 09:48:43
【问题描述】:

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

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

类别值是参数化的。

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,%

【问题讨论】:

标签: sql-server stored-procedures dynamic


【解决方案1】:

您是否尝试过这样的查询?

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   

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

【讨论】:

    【解决方案2】:

    您必须使用动态 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 的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2015-12-20
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多