如何在SQL Server变量中存储多个值

时间:2017-11-07 22:06:13

标签: sql sql-server database

我想将SELECT语句中的值存储到一个能够保存多个值的变量中,因为我的SELECT语句返回多个INT类型的值。这就是我的SP到目前为止的样子。

ALTER PROCEDURE "ESG"."SP_ADD"
AS
BEGIN

DECLARE @Id table(identifiers VARCHAR);

INSERT INTO @Id (identifiers) VALUES('axaa1aaa-aaaa-a5aa-aaaa-aa8aaaa9aaaa');
INSERT INTO @Id (identifiers) VALUES('bxbb1bbb-bbbb-b5bb-bbb4-bb8bbbb9bbbf');

DECLARE @tranID INT = (SELECT 
DOCUMENT_SET_.DOCUMENT_SET_TRANSACTION_ID 
                            FROM DOCUMENT_SET_TRANSACTION 
                                    WHERE DOCUMENT_SET_TRANSACTION.IDENTIFIER IN (SELECT identifiers FROM @Id));  

END

变量@tranID应该是一个列表或数组来保存id。是否有可能成为SQL Server?

2 个答案:

答案 0 :(得分:3)

您只需声明table

类型的变量即可
DECLARE @tblTrans TABLE (
    tranID INT
);

INSERT INTO @tblTrans 
SELECT DOCUMENT_SET_TRANSACTION.DOCUMENT_SET_TRANSACTION_ID 
FROM ESG.DOCUMENT_SET_TRANSACTION 
WHERE DOCUMENT_SET_TRANSACTION.IDENTIFIER 
    IN (SELECT identifiers FROM @envelopeId);

根据您在此之后要对值做什么,您可以声明光标循环遍历它们或直接从变量中选择。

您还可以考虑使用临时表,具体取决于您需要的范围。

答案 1 :(得分:0)

试试这个,只取第一行的例子。你试试这个吗?

select DOCUMENT_SET_TRANSACTION.DOCUMENT_SET_TRANSACTION_ID,
(STUFF((SELECT '-' + convert(varchar(max),DOCUMENT_SET_TRANSACTION.DOCUMENT_SET_TRANSACTION_ID) 
         FROM  ESG.DOCUMENT_SET_TRANSACTION  
         FOR XML PATH ('')), 1, 2, '')) AS example
FROM ESG.DOCUMENT_SET_TRANSACTION