【问题标题】:Search and replace part of string in database - what are the pitfalls?在数据库中搜索和替换部分字符串 - 有什么陷阱?
【发布时间】:2015-02-26 17:10:59
【问题描述】:

我需要将 SQL db 表 Column1 中出现的所有“google.com”替换为“newurl”。它可以是一个完整的单元格值,它的一部分(varchar() 的子字符串),甚至可以在一个单元格中遇到多次。

基于SO answer search-and-replace-part-of-string-in-database

这是我需要的:

UPDATE
    MyTable
SET
    Column1 = Replace(Column, 'google.com', 'newurl')
WHERE
    xxx

但是,在那个答案中提到

You will want to be extremely careful when doing this! I highly recommend doing a backup first.

做这个查询有什么陷阱?看起来它与任何文本编辑器通过单击全部替换按钮所做的相同。我认为即使使用保留副本也无法检查错误,因为我想提前知道可能的错误。

有什么理由要小心这个查询? 同样,我希望它在 SQL db 的 MyTable 表的 Column1 中将所有出现的google.com 替换为“newurl”。

谢谢。

【问题讨论】:

  • 假设字符串“google.com”在文本中被用作 URL 的一部分。这就是您可能要小心的原因之一。我建议使用正则表达式替换(我认为这在 SQL Server 中是可能的),这样你就知道你只是替换 URL。但是,是的,备份也是一个非常好的主意!

标签: sql sql-server string replace str-replace


【解决方案1】:

只需创建一个测试表,作为原始源表的副本,在那里完成更新并检查结果。

您会希望将此作为良好的 SQL 编程实践,以确保不会弄乱不应更新的列。

您可以做的另一件事是使用 SELECT 语句预先计算符合条件的记录。

运行您的更新语句,如果计数是 1-1 匹配,您应该很高兴。

我能想到的唯一会在这方面发生负面影响的事情是额外的列得到更新。您的 WHERE 子句对我们来说并不具体,因此无法验证您正在做的事情是否符合您的预期。

【讨论】:

    【解决方案2】:

    我认为发布答案的人只是谨慎 - 这将修改 MyTable 中每一行的 Column1 中的值,因此请确保在执行时您是认真的。另一种谨慎的方法是将其包装在事务中,以便在您不喜欢结果时将其回滚。

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 2015-05-02
      • 1970-01-01
      • 2015-11-13
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      相关资源
      最近更新 更多