2017-03-08 41 views
0

SQL 2012 如何在替换语句的第二个参数中使用变量。
e.g:在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操作之前和之后都满足,也可能发生这种情况。

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

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)