请考虑以下脚本。
创建表:
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(或我正在使用的任何工具)中工作。
答案 0 :(得分:1)
@colors是单个varchar,而不是varchars列表。你可以做的是将你的值插入临时表并加入其中。
答案 1 :(得分:1)
我认为您可以使用sp_executesql
可能适合您