动态中的 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
我有一个在动态 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