声明并设置具有多个可能值的变量

Pet*_*erH 0 t-sql sql-server variables declare table-variable

是否可以将变量设置为具有多个值?

在下面的示例中,我想设置@variable和使用商店号码1,4,7和12

然后在WHERE声明中使用变量.

以下是纯粹的例子,看看这是否可行

Declare @Variable INT;

Set @Variable = IN(1,4,7,12)

Select *
From dbo.EUactivestores eu
Where eu.[Store No] = @Variable
Run Code Online (Sandbox Code Playgroud)

如果这是可能的,或类似的东西的任何建议将是伟大的.

我相信它可以帮助我创建一个更动态的查询

Shn*_*ugo 7

使用像这里的表变量

DECLARE @tbl TABLE(v INT);
INSERT INTO @tbl VALUES(1),(4),(7),(12);
Run Code Online (Sandbox Code Playgroud)

您可以在WHERE此处使用此子句:

WHERE eu.[Store No] IN(SELECT v FROM @tbl);
Run Code Online (Sandbox Code Playgroud)

完全工作的例子:

DECLARE @tbl TABLE(v INT);
INSERT INTO @tbl VALUES(1),(4),(7),(12);

DECLARE @mockup TABLE(ID INT IDENTITY,SomeValue VARCHAR(100));
INSERT INTO @mockup VALUES('val 1'),('val 2'),('val 3'),('val 4'),('val 5')
                         ,('val 6'),('val 7'),('val 8'),('val 9'),('val 10')
                         ,('val 11'),('val 12'),('val 13'),('val 14'),('val 15');
Run Code Online (Sandbox Code Playgroud)

- 来自你桌子的价值

SELECT * FROM @mockup AS m
WHERE m.ID IN(SELECT v FROM @tbl);
Run Code Online (Sandbox Code Playgroud)

- 或否定上述内容

SELECT * FROM @mockup AS m
WHERE m.ID NOT IN(SELECT v FROM @tbl);
Run Code Online (Sandbox Code Playgroud)