2017-06-15 18 views
0

我基本上试图将查询的输出存储在变量中,但得到错误消息无法捕获变量中的查询输出

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。

--DECLARE @companystring varchar(max)= '867343,867358,867443,867458,867543' 

    DECLARE @companystring varchar(max) 
    set @companystring = (SELECT DISTINCT Top 1000(mc.companyId) FROM ciqMarketCap mc 
    JOIN ciqCompany c ON c.companyid = mc.companyid 
    WHERE c.companyStatusTypeId NOT IN (5,6) AND c.companyTypeId IN (1,4)) 


    select 
      ci.id 
     into #companyId 
     from dbo.splitstring(@companystring) ci 

有人能告诉我问题是什么吗?

+3

您的查询甚至没有尝试返回单个行的伪装。我不知道你真的想做什么,但想到一张临时桌子。 –

+1

那么,您的子查询返回1000行,并且您只能在子查询中返回1(因此,不允许在子查询中返回多个值的错误)。你真的想把1000条记录填入1个字符串吗? –

+0

基本上我想要做的是替代我更新后的帖子中的注释声明语句。我需要1000个公司ID存储在该变量 – Tom

回答

1

如果我理解你的权利,你需要列数据转换为字符串,可以使用下面的查询 -

DECLARE @companystring nvarchar(max) 

SELECT TOP 1000 @companystring = coalesce(@companystring+';','') + CAST(mc.companyId AS nvarchar) 
FROM ciqMarketCap mc 
JOIN ciqCompany c ON c.companyid = mc.companyid 
WHERE c.companyStatusTypeId NOT IN (5,6) AND c.companyTypeId IN (1,4) 

SELECT @companystring 
1

首先,它不是理想的大数据集存储到为nvarchar/VARCHAR变量。 适当的步骤是创建一个临时表变量。请参阅下面编辑的查询:

DECLARE @companystring TABLE(companyId nvarchar(max)); 

INSERT INTO @companystring(companyId) 
SELECT 
DISTINCT Top 1000(mc.companyId) 
FROM ciqMarketCap mc 
JOIN ciqCompany c ON c.companyid = mc.companyid 
WHERE c.companyStatusTypeId NOT IN (5,6) 
AND c.companyTypeId IN (1,4); 

select ci.companyId into #companyId from @companystring ci; 
相关问题