2009-11-02 95 views
2

我正在嘗試更新列中的所有記錄,以便它們以'CD'開始,例如DCE206將成爲CDE206。更新聲明錯誤:子查詢返回的值超過1

UPDATE table 
SET column = REPLACE(column1, 'DC', 'CD') 
WHERE column1 LIKE 'DC%' 

我使用上面的更新語句但是下面的錯誤出現

「子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或子查詢用作表達式時,這是不允許的。

在聲明中是否有任何可以改變的地方,或者我需要使用遊標進行研究。

我使用SQL Server 2000中

+0

REPLACE並不意味着要進行字符串替換 – Etan 2009-11-02 11:43:17

+0

從MSDN開始:REPLACE函數「用另一個字符串值替換所有出現的指定字符串值」 – Fermin 2009-11-02 11:46:59

+0

@Etan:你是什麼意思? – gbn 2009-11-02 11:47:03

回答

9

你不可能從該代碼中得到這個錯誤。 msut錯誤來自其他一些代碼。

你有什麼比運行更新?觸發器?

+2

看起來像一個觸發器的經典案例,一次更新只爲一條記錄設計。 – HLGEM 2009-11-02 15:27:06

0

這似乎就在我身邊做工精細,2005年是一個批處理查詢,也許是另一個更新導致此消息的一部分?

編輯:在SQL 2000上運行,沒有錯誤。

create table table1 (id int identity, column1 varchar(10)) 

insert into table1 values ('DCE1') 
insert into table1 values ('DCE2') 
insert into table1 values ('DCE3') 
insert into table1 values ('DCE4') 
insert into table1 values ('DCE5') 

UPDATE table1 
SET column1 = REPLACE(column1, 'DC', 'CD') 
WHERE column1 LIKE 'DC%' 

select * from table1 
drop table table1 
2

您發佈不會產生錯誤的語句:它沒有子查詢。

+0

我正在屏幕上看着它,那是出現的錯誤信息 – 2009-11-02 11:52:55

+0

@wd:我並不是說你沒有錯誤:我說這不是這個說法。 – gbn 2009-11-02 12:24:04

+0

我有同樣的問題,我有一個簡單的更新語句沒有子查詢。很明顯,它有一個錯誤報告錯誤的錯誤 – JeremyK 2013-06-26 02:01:53

0

您似乎有一個錯字。它應該是:

「SET列1 =」 的

代替 「SET列=」

(存在丟失的 '1')

0

如果您收到您從簡單的UPDATE中指出錯誤,那麼很可能您在表上有一個UPDATE觸發器,並且錯誤來自觸發器。

但是,您發佈的代碼當然不是您遇到問題的代碼,因爲「table」是關鍵字,不能是您正在更新的表的名稱。

相關問題