动态中的 IN 关键字 SQL

IN keyword in Dynamic SQL

我有一个在动态 SQL 中实现的存储过程。我正在尝试包含 IN 关键字并在单引号之间的列表中传递固定值。

我想写这样的东西:

where grp.Status in ('A,S') 

但是上面的语句已经用单引号括起来了。

我尝试使用类似下面的东西:

where grp.Status in (' +QUOTENAME('A,S','''')+  

但查询仅识别列表中的第一个值,即 'A'。

我还阅读了有关使用拆分函数并将值放入临时 table 并改为使用临时 table 的列的信息。但是,我不会为一个小列表执行该过程。

非常感谢任何建议和解决方案。

您可以将列表放入 SQL:

'where grp.Status in (''' + replace('A,S', ',', ''',''') + ''') . . . 

如果我正确地使用了那些单引号,这应该会产生如下结果:

where grp.Status in ('A','S') . . .

如果您不想使用拆分功能,您可以对动态 sql 执行以下操作。

declare @xml xml 
      , @list Varchar(100) = 'A,B'

set @xml = N'<root><r>' + replace(@list, ',' ,'</r><r>') + '</r></root>'

Declare @Sql Nvarchar(MAX);

SET @Sql = N'Select * from TableName grp
             WHERE grp.Status IN (
                                   select r.value(''.'',''varchar(max)'') as item
                                  from @xml.nodes(''//root/r'') as records(r)
                                  )'

Exec sp_executesql @Sql
                  ,N'@xml XML'
                  ,@xml