1. 程式人生 > >SQL錯誤排查:子查詢返回的值不止一個。子查詢用作表示式時,這種情況是不允許的...

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”來解。但是查詢不出資料庫的所有資料。誰有更好的辦法呢?