2009-10-14 98 views
1

我沒有任何想法,爲什麼我收到此錯誤: -什麼導致「子查詢返回多個值...」錯誤?

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 
The statement has been terminated. 

我試圖運行此查詢: -

ALTER TABLE Test1 NOCHECK CONSTRAINT ALL 
ALTER TABLE Test2 NOCHECK CONSTRAINT ALL 


UPDATE Test1 
SET ID= '05f6c6b4-63ff-45b2-a5e2-920d5dce3e45' 
WHERE ID = '05e6c6b4-63ff-45b2-a5e2-920d5dce3e45'; 
UPDATE Test2 
SET ID = '05f6c6b4-63ff-45b2-a5e2-920d5dce3e45' , 
SpecID = NULL , 
RefLastName = 'Dummy' , 
RefFirstName = 'First Name' , 
RefMiddleName = NULL , 
RefPhone1 = '111444444' , 
RefPhone2 = '2121222' , 
RefFax = '222222' , 
RefEmail = '[email protected]' 
WHERE 
RefID = '05e6c6b4-63ff-45b2-a5e2-920d5dce3e45' 

ALTER TABLE Test1 WITH CHECK CHECK CONSTRAINT ALL 
ALTER TABLE Test2 WITH CHECK CHECK CONSTRAINT ALL 

回答

6

您正在更新的表中是否有一個觸發器?如果是這樣,可能它包含具有多個值的子查詢。

就我個人而言,我發現在插入或更新時關閉檢查約束是非常糟糕的做法。他們在那裏是有原因的,如果你的數據不符合這些約束條件,它不應該按原樣插入,或者約束需要根據新的條件進行調整。如果將來記錄更新,它也會產生問題。

+0

感謝您的線索。錯誤是因爲觸發器。順便說一句,我同意這是一個不好的做法。但我認爲這就是我如何實現將舊數據庫與新數據庫同步的任務(更新了一個表格結構的巨大變化)。在新數據庫中,所有GUID都是新的。 :( – Jango 2009-10-14 15:37:58

+0

我強烈建議你考慮改變你的觸發來處理多個更新或提高一個更有意義的錯誤,如果多行是在子選擇。 – 2009-10-14 15:40:47

+0

他一定是上FK約束雙方修改的列。只有這樣,才能做到如果沒有禁用它們(即我能想到的,假設NOT NULL列)是使表A的新條目,更新表B到點到一個新的條目,然後刪除A. – 2009-10-14 15:40:48

0

看起來像你需要一個分號來結束這個語句:

UPDATE Test 
SET RefID = '05f6c6b4-63ff-45b2-a5e2-920d5dce3e45' 
WHERE RefID = '05e6c6b4-63ff-45b2-a5e2-920d5dce3e45'; 

UPDATE RefPhysician 
SET RefID = '05f6c6b4-63ff-45b2-a5e2-920d5dce3e45' , 
SpecID = NULL , 
RefLastName = 'DR. BRAD DIBBLE' , 
RefFirstName = 'First Name' , 
RefMiddleName = NULL , 
RefPhone1 = '613444444' , 
RefPhone2 = 'print,read,866,1' , 
RefFax = '6476476464' , 
RefEmail = '[email protected]' 
WHERE RefID = '05e6c6b4-63ff-45b2-a5e2-920d5dce3e45' ; <-- semicolon 
+0

它沒有工作。 – Jango 2009-10-14 15:00:36

+0

嗯,可以肯定的是,嘗試用分號結束每個SQL語句。 – 2009-10-14 15:15:40

相關問題