使用REPLACE

时间:2017-03-08 02:17:23

标签: sql sql-server replace sql-update

SQL 2012 如何在替换语句中的第二个参数中使用变量 e.g:

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)

然后它运作正常。

2 个答案:

答案 0 :(得分:0)

请参阅此处的主题:What are practical differences between `REPLACE` and `INSERT ... ON DUPLICATE KEY UPDATE` in MySQL?

标记答案可能是您的问题:

REPLACE在内部执行删除,然后执行插入。如果您有指向该行的外键约束,这可能会导致问题。在这种情况下,REPLACE可能会失败或更糟:如果您的外键设置为级联删除,则REPLACE将导致其他表中的行被删除。即使在REPLACE操作之前和之后都满足约束,也会发生这种情况。

使用INSERT ... ON DUPLICATE KEY UPDATE避免了这个问题,因此是首选。

答案 1 :(得分:0)

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

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

set @query='select replace(''1234EFGH'','''+@old+''','''+@new+''')'

exec (@query)