SQL 2012
如何在替换语句的第二个参数中使用变量。
例如:
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)
然后就可以正常工作了。
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)
请参阅此处的线程:MySQL 中的“REPLACE”和“INSERT ... ON DUPLICATE KEY UPDATE”之间有什么实际区别?
标记回答可能是您的问题:
在内部执行删除然后插入。如果您有指向该行的外键约束,这可能会导致问题。在这种情况下,REPLACE
可能会失败,或者更糟:如果您的外键设置为级联删除,REPLACE
将导致其他表中的行被删除。即使在REPLACE
操作之前和之后都满足约束,也可能会发生这种情况。REPLACE
使用
可以避免这个问题,因此是首选。INSERT ... ON DUPLICATE KEY UPDATE