我正在使用SSRS生成报告并尝试添加一个检查以说明此参数何时等于此值然后显示这些值,但因为参数是一个整数而我无法传递多个整数值进入一个参数。
我该怎么做?
这是我要做的事情的例子:
DECLARE @EntityGroupID INT
SET @EntityGroupID = 741
IF @EntityGroupID = 741
BEGIN
SET @EntityGroupID= 3097,3098,3099,3100,3101,3125
END
SELECT *
FROM tEntityGroup
WHERE ID in (@EntityGroupID)
答案 0 :(得分:0)
将其作为表变量传递,如
declare @tbl table(EntityGroupID int);
insert into @tbl
select 3097
union
select 3098
union
select 3099
然后你可以说
SELECT *
FROM tEntityGroup
WHERE ID in (select EntityGroupID from @tbl);
答案 1 :(得分:0)
您可以先创建一个ID,Value
对的表变量:
DECLARE @EntityGroup TABLE(Id INT, VALUE VARCHAR(50))
INSERT INTO @EntityGroup VALUES (741,null)
IF (SELECT Id FROM @EntityGroup) = 741
BEGIN
update @EntityGroup SET VALUE = '3097,3098,3099,3100,3101,3125' WHERE Id = 741
END
然后我们可以根据需要提取数据:
SELECT *
FROM tEntityGroup
WHERE ID in
(
SELECT LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS EntityGroupID
FROM
(
SELECT CAST('<XMLRoot><RowData>' + REPLACE(VALUE,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM @EntityGroup
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)
)
答案 2 :(得分:0)
为什么不使用两个SELECT
语句。如果您已拥有控制流,只需使用它来执行SELECT
,例如
DECLARE @EntityGroupID INT
SET @EntityGroupID = 741
IF @EntityGroupID = 741
BEGIN
SELECT *
FROM tEntityGroup
WHERE ID IN (3097,3098,3099,3100,3101,3125);
END
ELSE
BEGIN
SELECT *
FROM tEntityGroup
WHERE ID = @EntityGroupID;
END
或者,如果你真的想用一个选择来做,那么使用表变量:
DECLARE @EntityGroupID INT
SET @EntityGroupID = 741
DECLARE @Entities TABLE (ID INT NOT NULL);
INSERT @Entities (ID)
SELECT @EntityGroupID
WHERE @EntityGroupID != 741
UNION ALL
SELECT ID
FROM (VALUES (3097),(3098),(3099),(3100),(3101),(3125)) t (ID)
WHERE @EntityGroupID = 741;
SELECT *
FROM tEntityGroup
WHERE ID in (SELECT ID FROM @Entities);