我正在尝试调试其他人的SQL报表,并将基础报表查询放入SQL 2012的查询窗口中。

报告要求的参数之一是整数列表。这是通过多选下拉框在报告上实现的。报表的基础查询在where子句中使用此整数列表,例如

select *
from TabA
where TabA.ID in (@listOfIDs)

我不想修改正在调试的查询,但无法弄清楚如何在SQL Server上创建一个变量来保存此类数据以对其进行测试。

例如
declare @listOfIDs int
set listOfIDs  = 1,2,3,4

没有可以容纳整数列表的数据类型,那么如何在SQL Server上使用与报表相同的值运行报表查询?

最佳答案

Table variable

declare @listOfIDs table (id int);
insert @listOfIDs(id) values(1),(2),(3);

select *
from TabA
where TabA.ID in (select id from @listOfIDs)

要么
declare @listOfIDs varchar(1000);
SET @listOfIDs = ',1,2,3,'; --in this solution need put coma on begin and end

select *
from TabA
where charindex(',' + CAST(TabA.ID as nvarchar(20)) + ',', @listOfIDs) > 0

10-04 10:42