通过 REPLACE 使用变量

问题描述 投票:0回答:2

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)

然后就可以正常工作了。

sql sql-server replace sql-update
2个回答
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)

0
投票

请参阅此处的线程:MySQL 中的“REPLACE”和“INSERT ... ON DUPLICATE KEY UPDATE”之间有什么实际区别?

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

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

使用

INSERT ... ON DUPLICATE KEY UPDATE
可以避免这个问题,因此是首选。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.