动态SQL中的IN关键字

时间:2016-12-21 21:33:44

标签: sql sql-server dynamic-sql

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

我想写这样的东西:

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

但上面的语句已经封装在单引号中。

我尝试使用类似下面的内容:

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

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

我还阅读了有关使用split函数并将值放在临时表中并使用临时表的列的内容。但是,我不是为了一个小清单而做这个过程。

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

2 个答案:

答案 0 :(得分:2)

您可以将列表放入SQL:

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id="container"></div>

如果我将这些单引号设为正确,则应将结果生成为:

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

答案 1 :(得分:0)

如果您不想使用split功能,可以使用动态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