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)
然后它运作正常。
答案 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)