SQL错误排查:子查询返回的值不止一个。子查询用作表达式时,这种情况是不允许的...
SELECT OrderID FROM dbo.Orders WHERE EmployeeID =(SELECT EmployeeID FROM dbo.Employees WHERE LastName LIKE N'D%');
消息 512,级别 16,状态 1,第 4 行子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。出现这种结果的原因是SQL Server 2005 的返回结果分为Scalar(标量,可以理解单一值)和Set(结果集)“=”后面的查询条件肯定只能是Scalar,所以当子查询“(SELECT EmployeeID FROM dbo.Employees WHERE LastName LIKE N'D%')”返回多条记录(Set,结果集)时,出现了上面那种情况。
正确的做法是用“in”代替“=”,用下面的查询就可以出正确结果了
SELECT OrderID FROM dbo.Orders WHERE EmployeeID IN (SELECT EmployeeID FROM dbo.Employees WHERE LastName LIKE N'D%');
如果此错误出现的不是在WHERE中,那么又如何解呢?可用“top 1”来解。但是查询不出数据库的所有数据。谁有更好的办法呢?
                    
                
                
            
        
浙公网安备 33010602011771号