【问题标题】:Assign multiple values in declaration part在声明部分分配多个值
【发布时间】:2020-12-22 17:09:46
【问题描述】:

我需要通过提供多个声明值来实现结果。怎么办?

DECLARE @ID INT

SET @ID = 1   --instead I need to provide multiple values like @ID = 1,2,3

SELECT C.Name, C.EmployeeID 
FROM Cases c
WHERE C.EmployeeID = @ID

表格

Name   |    ID
-------+---------
A           1
B           2
C           3
D           4
E           5
F           6

结果应该是:

A           1
B           2
C           3

【问题讨论】:

  • 你不能。标量变量保存单个值。您需要一个表变量(或临时表或实际表)来存储多个值,为您的查询使用连接或 IN 子句。
  • 您应该说明这些值的来源以及它们的数量是否始终相同。
  • 仅供参考,SQL Server 2008 在一年多前就已终止;您真的应该尽快查看升级路径。

标签: sql-server sql-server-2017 ssms-2017


【解决方案1】:

一种方法是使用表变量:

DECLARE @IDs TABLE(ID INT);
INSERT INTO @IDs VALUES(1),(2),(3);

SELECT C.Name, C.EmployeeID 
FROM dbo.Cases AS c
WHERE C.EmployeeID IN(SELECT ID FROM @IDs);

【讨论】:

    【解决方案2】:

    一个非常简单的方法是使用 XML 数据类型。

    DECLARE @ids xml = '<ids><id>1</id><id>2</id><id>3</id></ids>';
    
    SELECT 
        C.[Name],
        C.EmployeeID 
    FROM Cases c 
    WHERE C.EmployeeID IN (
    
        SELECT x.f.value( '.', 'int' ) FROM @ids.nodes ( '//ids/id' ) x( f )
    
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多