如何避免“子查询返回超过1值”报告?

时间:2017-04-13 13:31:11

标签: sql sql-server stored-procedures

我写了以下脚本:

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

并继续收到错误:子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

我只是尝试对我返回的值进行一些比较,并根据脚本上可见的三个条件执行它们。

为什么我一直收到报告?

2 个答案:

答案 0 :(得分:0)

好像CertName表中有多个#Temp和/或多个KeyName

如果有一个值重复多次,您可以使用distinct

解决此问题
IF(Select distinct KeyName From #Temp) ...

如果您有多个不同的值,可以使用

解决它
IF (Select count(*) From #Temp where KeyName = 'SSN_Key_01') > 0 ...

答案 1 :(得分:0)

试试这个:

{{1}}