我有一个在Dynamic SQL中实现的存储过程。我试图包含一个IN关键字,并在列表中的单引号之间传递固定值。
我想写这样的东西:
where grp.Status in ('A,S')
但上面的语句已经封装在单引号中。
我尝试使用类似下面的内容:
where grp.Status in (' +QUOTENAME('A,S','''')+
但查询只识别列表中的第一个值,即' A'。
我还阅读了有关使用split函数并将值放在临时表中并使用临时表的列的内容。但是,我不是为了一个小清单而做这个过程。
非常感谢任何建议和解决方案。
答案 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