2017-04-13 114 views
0

我寫了下面的腳本:如何避免「子查詢返回超過1個值」報告?

IF OBJECT_ID('tempdb..#Temp') IS NOT NULL 
DROP TABLE #Temp 
create table #Temp 
(
     [KeyName] [nvarchar](max), 
     [CertName] [nvarchar](max), 
) 
Go 


INSERT INTO #Temp 
EXEC fetch_data 

GO 

IF(Select #Temp.KeyName From #Temp) = 'SSN_Key_01' AND (Select CertName From 
#Temp) = 'PasswordManager001' 
EXEC decrypt_1 

Else 

IF(Select KeyName From #Temp) = 'SSN_Key_02' AND (Select CertName From #Temp) 
= 'PasswordManager002' 
EXEC decrypt_2 

Else 

IF(Select KeyName From #Temp) = 'SSN_Key_03' AND (Select CertName From #Temp) 
= 'PasswordManager003' 
EXEC decrypt_3 

GO 

,並不斷得到錯誤:子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

我只是試着對我的返回值做一點比較,並根據腳本中可見的三個條件執行它們。

爲什麼我不斷收到報告?

+3

因爲選擇返回多於1行,mybe要使用'IF EXISTS' – Sami

+0

運行fetch_data存儲過程並查看它返回的內容。或者,獨立運行這些子查詢並查看結果。 –

回答

0

解決它試試這個:

IF exists (Select #Temp.KeyName From #Temp where KeyName = 'SSN_Key_01') 
begin 
if exists (Select CertName From 
#Temp where CertName = 'PasswordManager001') 
EXEC decrypt_1 
end 
Else 

IF exists(Select KeyName From #Temp where KeyName = 'SSN_Key_02') 
begin 
if exists (Select CertName From #Temp where CertName 
= 'PasswordManager002') 

EXEC decrypt_2 
end 

Else 

IF exists (Select KeyName From #Temp where KeyName = 'SSN_Key_03') 
begin 
if exists (Select CertName From #Temp where CertName 
= 'PasswordManager003') 
EXEC decrypt_3 

end 
0

似乎您的#Temp表中有多個CertName和/或多個KeyName

如果有重複不止一次一個值,你可以用一個distinct

IF(Select distinct KeyName From #Temp) ... 

如果您有多個不同的價值觀解決這個問題,你或許可以用

IF (Select count(*) From #Temp where KeyName = 'SSN_Key_01') > 0 ... 
相關問題