2017-08-22 162 views
0

我有一個存儲過程,它在下面執行SQL。這是給我運行時錯誤:'子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或子查詢用作表達式時,這是不允許的。我知道我的子查詢返回的值超過1,但我正在努力尋找解決方法。基本上我試圖選擇沒有4個或更多連續字符的所有公司名稱。請幫忙。SQL錯誤:子查詢返回的值超過1

select @flag = 1 from [dbo].[Country] where 1 =(SELECT 1 
FROM tabC c 
WHERE NOT EXISTS (SELECT 1 
       FROM (SELECT REPLICATE(CHAR(32 + N), 4) AS val 
        FROM (select top 95 row_number() over(order by t1.number) as N 
          from master..spt_values t1) AS s) mul 
       WHERE CHARINDEX(mul.val,c.CompanyName) > 0)) 
+0

這將返回'1'在TABC每一行,其中'不exists'是真實的,即多行 – JohnHC

+0

我建議你問*另一個問題。提供樣本數據,期望的結果,並明確說明您想要做什麼。你聲稱你想要「公司名稱」,但是從「國家」表中選擇。你沒有選擇任何名字,你正在設置一個標誌。 –

回答

0

只需使用聚合?

select MAX(1) from ... 

或不同;

select distinct 1 from ... 

,以確保只有返回一行

0
DECLARE @flag INT 

select @flag = CASE WHEN NOT EXISTS (
       SELECT 1 
       FROM (
        select top 95 REPLICATE(CHAR(33 + t1.number), 4) as val 
        from master..spt_values t1 
        where t1.type = 'P' 
       ) mul 
       WHERE CHARINDEX(mul.val, c.CompanyName) > 0) THEN 1 
       END 
SELECT @Flag 
相關問題