如何在sql数据库中的所有表的所有列中搜索和替换字符串的一部分

如何在sql数据库中的所有表的所有列中搜索和替换字符串的一部分,sql,sql-server,database,Sql,Sql Server,Database,是否可以搜索和替换数据库所有表中所有列中出现的所有字符串?我使用Microsoft SQL Server。不容易,但我可以用两种方法来实现: 编写一系列存储过程,用于标识所有表的所有varchar和text列,并以“update foo SET BAR=REPLACE(BAR,'foobar','qux')的形式为每个表的每列生成单独的update语句。这可能需要对系统表进行大量的查询,并进行大量的实验——微软不会特意记录这些内容 将整个数据库导出到单个文本文件,对该文件执行搜索/替换,然后重新

是否可以搜索和替换数据库所有表中所有列中出现的所有字符串?我使用Microsoft SQL Server。

不容易,但我可以用两种方法来实现:

  • 编写一系列存储过程,用于标识所有表的所有varchar和text列,并以“update foo SET BAR=REPLACE(BAR,'foobar','qux')的形式为每个表的每列生成单独的update语句。这可能需要对系统表进行大量的查询,并进行大量的实验——微软不会特意记录这些内容
  • 将整个数据库导出到单个文本文件,对该文件执行搜索/替换,然后重新导入整个数据库。考虑到您使用的是MS SQL Server,这实际上是更简单的方法。Microsoft出于其他原因创建了,但它是一个很好的工具,可以将SQL Server数据库的所有表导出为包含纯SQL DDL和DML的文本文件。运行该工具导出数据库的所有表,根据需要编辑生成的文件,然后将文件反馈到
    sqlcmd
    以重新创建数据库

  • 如果有选择的话,我会使用第二种方法,只要它能与您的SQL Server版本配合使用。上次我使用该工具时,它满足了我的需要(MS SQL Server 2000/2005),但在处理数据库角色时,它有一些怪癖。

    编写此类查询的一个良好起点是存储过程。完整的代码在链接处(不是很简单,但是复制/粘贴并使用它,它只是工作)


    从那时起,修改代码以替换找到的值就相对简单了。

    在MySQL中,您可以很容易地这样做:

    更新[表格名称]设置[字段名称]=replace([字段名称],“[string\u to\u find]”,“[string\u to\u replace]”)

    我个人在生产服务器上成功地测试了这一点

    Example:
    update users set vct_filesneeded = replace(vct_filesneeded,'.avi','.ai');
    

    Ref:

    它是否也适用于microsoft sql server?如果是这样,那就太完美了!