我试图调试别人的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上使用与报表相同的值运行报表查询?
如果你使用的是字符串列表,SQL中有一个新函数叫做string_split。
Ref Link STRING_SPLIT (Transact-SQL)
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'
SELECT value
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> '';
你可以这样传递这个查询:
SELECT *
FROM [dbo].[yourTable]
WHERE (strval IN (SELECT value FROM STRING_SPLIT(@tags, ',') WHERE RTRIM(value) <> ''))
表变量
declare @listOfIDs table (id int);
insert @listOfIDs(id) values(1),(2),(3);
select *
from TabA
where TabA.ID in (select id from @listOfIDs)
or
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
如果你使用的是字符串列表,SQL中有一个新函数叫做string_split。
Ref Link STRING_SPLIT (Transact-SQL)
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'
SELECT value
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> '';
你可以这样传递这个查询:
SELECT *
FROM [dbo].[yourTable]
WHERE (strval IN (SELECT value FROM STRING_SPLIT(@tags, ',') WHERE RTRIM(value) <> ''))