2017-06-15 16 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; 
相關問題