2017-03-08 4 views
0

SQL 2012 replaceステートメントで2番目の引数に変数を使用する方法を教えてください。
例えば: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は他のテーブルの行を削除します。これは、REPLACE操作の前後で制約が満たされていても発生します。

INSERT ... ON重複キー更新を使用すると、この問題は回避されます。

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) 
関連する問題