【问题标题】:Using variables with REPLACE使用带有 REPLACE 的变量
【发布时间】:2017-07-28 10:58:57
【问题描述】:

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 放入存储过程中解决了这个问题,它可以正常工作。我尝试了 Udhaya 的示例,它在选择中运行良好,但在更新中没有,它给出了一个关于存储过程的错误,导致我得到结果。

标签: sql sql-server replace sql-update


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

    在此处查看主题:What are practical differences between `REPLACE` and `INSERT ... ON DUPLICATE KEY UPDATE` in MySQL?

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-11
      • 2012-03-14
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      相关资源
      最近更新 更多