以编程方式创建用于IN语句的变量

时间:2010-08-09 14:26:16

标签: tsql sql-server-2000 ssrs-2008

请考虑以下脚本。

创建表:

IF OBJECT_ID('Colortable') IS NOT NULL
  DROP TABLE ColorTable

CREATE TABLE Colortable (Color VARCHAR(32))
GO

插入一些值:

SET  NOCOUNT ON

INSERT Colortable
  SELECT 'red'

INSERT Colortable
  SELECT 'orange'

INSERT Colortable
  SELECT 'blue'

INSERT Colortable
  SELECT 'green'
GO

自动创建我的变量(它将成为SSRS中的参数):

DECLARE @colors VARCHAR(1024)

SELECT @colors =
         COALESCE(
           @colors + '''' + ',' + '''', '') +
         Color
FROM Colortable

当我使用“选择@colors”时,我得到以下内容:

'red','orange','blue','green'

但是,我的查询无法按预期工作。

SELECT *
FROM colortable
WHERE Color IN ('red', 'orange', 'blue', 'green') -- Returns 4 rows. 


SELECT *
FROM colortable
WHERE Color IN (@colors) -- Returns 0 Rows

谁能告诉我为什么?我正在尝试生成一串值,以便此脚本可以在SSRS和SSMS(或我正在使用的任何工具)中工作。

2 个答案:

答案 0 :(得分:1)

@colors是单个varchar,而不是varchars列表。你可以做的是将你的值插入临时表并加入其中。

答案 1 :(得分:1)

我认为您可以使用sp_executesql可能适合您