如何在SQL Server中的一个参数中传递多个整数值

时间:2015-12-22 12:25:43

标签: sql tsql sql-server-2014

我正在使用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)

3 个答案:

答案 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);