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

时间:2010-06-11 11:28:24

标签: sql sql-server database

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

3 个答案:

答案 0 :(得分:4)

虽然我可以通过两种方式做到这一点,但并不容易:

  1. 编写一系列存储过程,标识所有表的所有varchar和text列,并为每个表格的每一列生成单独的更新语句“UPDATE foo SET BAR = REPLACE(BAR,'foobar','quux “)”。这可能涉及对系统表进行大量查询,并进行了大量实验 - 微软并没有尽力记录这些内容。
  2. 将整个数据库导出到单个文本文件,对其执行搜索/替换,然后重新导入整个数据库。鉴于您正在使用MS SQL Server,这实际上是更简单的方法。 Microsoft出于其他原因创建了Microsoft SQL Server Database Publishing Wizard,但它是一个很好的工具,可以将SQL Server数据库的所有表导出为包含纯SQL DDL和DML的文本文件。运行该工具以导出数据库的所有表,根据需要编辑生成的文件,然后将文件反馈给sqlcmd以重新创建数据库。
  3. 如果有选择,我会使用第二种方法,只要DPW适用于您的SQL Server版本。我最后一次使用该工具时,它满足了我的需求(MS SQL Server 2000/2005),但在使用数据库角色时有一些怪癖。

答案 1 :(得分:2)

在MySQL中,你可以很容易地做到这一点:

  

update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');

我已经在生产服务器上成功测试了这个。

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

参考:http://www.mediacollege.com/computer/database/mysql/find-replace.html

答案 2 :(得分:1)

编写此类查询的一个很好的起点是"Search all columns in all the tables in a database for a specific value"存储过程。完整的代码在链接(不是微不足道,但复制/粘贴并使用它,它只是工作)。

从那以后修改代码以替换找到的值是相对微不足道的。