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

问题描述 投票:0回答:4

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

sql sql-server database
4个回答
4
投票

并不容易,尽管我可以通过两种方法来做到这一点:

  1. 编写一系列存储过程来识别所有表的所有 varchar 和 text 列,并为每个表的每一列生成单独的更新语句,格式为“UPDATE foo SET BAR = REPLACE(BAR,'foobar','quux') ”。这可能会涉及对系统表的大量查询,并进行大量的实验——微软不会特意记录这些东西。
  2. 将整个数据库导出到单个文本文件,对其进行搜索/替换,然后重新导入整个数据库。鉴于您使用的是 MS SQL Server,这实际上是更简单的方法。 Microsoft 由于其他原因创建了“Microsoft SQL Server 数据库发布向导”,但它是一个很好的工具,可以将 SQL Server 数据库的所有表导出为包含纯 SQL DDL 和 DML 的文本文件。运行该工具导出数据库的所有表,根据需要编辑生成的文件,然后将文件反馈给 sqlcmd 以重新创建数据库。
    
    
    
  3. 如果可以选择,我会使用第二种方法,只要
DPW

适用于您的 SQL Server 版本。上次我使用该工具时,它满足了我的需求(MS SQL Server 2000 / 2005),但在使用数据库角色时它有一些怪癖。


2
投票

更新 [表名] 设置 [字段名] = 替换([字段名],'[要查找的字符串]','[要替换的字符串]');

我亲自在生产服务器上成功测试了这一点。

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

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


1
投票
“在数据库中所有表的所有列中搜索特定值”

存储过程。完整的代码位于链接(不是微不足道的,但是复制/粘贴它并使用它,它就可以工作)。 从那时起,修改代码以替换找到的值就相对简单了。


0
投票

识别列:首先,您需要识别要替换字符的列。假设您有三列,分别名为 Column1、Column2 和 Column3。 更新数据:您可以使用以下 SQL 查询将所有三列中的字符“©”替换为“Š”: SQL

UPDATE YourTableName SET Column1 = REPLACE(Column1, N'©', N'Š'), Column2 = REPLACE(Column2, N'©', N'Š'), Column3 = REPLACE(Column3, N'©', N'Š'); enter code here

将 YourTableName 替换为您的表的实际名称。

字符文字之前的 N 前缀可确保正确处理 Unicode 字符。 如果列的类型为 NVARCHAR,请使用 N 前缀。 如果您的列的类型为 VARCHAR,请省略 N 前缀。 执行查询:在 SQL Server Management Studio (SSMS) 或连接到数据库的任何其他 SQL 客户端中运行此查询。它将把指定列中所有出现的“©”更新为“Š”。

请记住根据您的数据库架构调整表名和列名。如果您有其他列需要更新,只需使用更多列分配来扩展 SET 子句即可。

© www.soinside.com 2019 - 2024. All rights reserved.