2017-03-08 73 views
0

SQL 2012 如何在替換語句的第二個參數中使用變量。
e.g:在REPLACE中使用變量

declare @new nchar (10) 
declare @old nchar (10) 

set @new = 'ABC' 
set @old = 'DEF' 

update table 
set value = REPLACE (column,@old,@new) 
where ..... 

這將運行,不會產生任何錯誤,但沒有任何更新任何內容。

,如果我溝@old變量和一個值,如

set value = REPLACE (column,'DEF',@new) 

然後它工作正常更換。

+0

我通過將上面的SQL放入存儲過程中,可以很好地解決問題。我試過Udhaya的例子,它在select中工作正常,但不是在更新中,它給出了一個關於存儲過程的錯誤,這導致了我的結果。 – Pauly

回答

0

查看線程在這裏:What are practical differences between `REPLACE` and `INSERT ... ON DUPLICATE KEY UPDATE` in MySQL?

商標回答,也許您的問題:

內部更換執行刪除操作,然後插入。如果您有指向該行的外鍵約束,則會導致問題。在這種情況下,REPLACE可能會失敗或更糟:如果您的外鍵被設置爲級聯刪除,REPLACE將導致其他表中的行被刪除。即使約束在REPLACE操作之前和之後都滿足,也可能發生這種情況。

使用INSERT ... ON DUPLICATE KEY UPDATE避免了此問題,因此是首選。

0
declare @new varchar(50) 
declare @old varchar(50) 
declare @query varchar(50) 

set @new = 'ABCD' 
set @old = '1234' 

set @query='select replace(''1234EFGH'','''[email protected]+''','''[email protected]+''')' 

exec (@query)