在MSSQL中使用动态IN子句

时间:2011-03-04 10:34:55

标签: sql tsql

为什么以下SQL不会抓取任何东西

DECLARE @Status AS VARCHAR(400)
SET @status = '''Closed'',''OPEN'''
select * from MYTABLE where status in(@status)

虽然如此 select * from MYTABLE where status in('Closed','Open')抓取我的行

2 个答案:

答案 0 :(得分:4)

您的第一个问题会检查数据库中是否存在值'Closed','OPEN'。这些值不会扩展。

如果您使用SQL Server 2008或更高版本,则可以使用Table Valued Parameters来实现相同的目标。

答案 1 :(得分:4)

如果你想做一些动态SQL,你可以,但我认为它不具备真正的竞争力。

  DECLARE   @Status nVARCHAR(400),
            @SQL nvarchar(500)

SET @status = '''Closed'''+','+'''OPEN'''
set @SQL = '
select * from [MYTABLE] where status in('+@status +')'

 exec sp_executesql @SQL
GO