【问题标题】:SQL query or script to search and replace all the old names in a database with new ones from another databaseSQL 查询或脚本,用于搜索数据库中的所有旧名称并将其替换为另一个数据库中的新名称
【发布时间】:2012-01-18 16:27:39
【问题描述】:

您好,我正在研究 SQL 数据库

使用 Microsoft SQL Server 2008 R2 和 Microsoft SQL Server 管理工作室

我有一个名为 FixedNamesDb 的数据库 在数据库中有一张名为 All

的表

类似这样(这是一个例子):

OldNames        NewNames
------------+---------------+
tom G         Thommas Grady               
Kate F        Kateline Farwell               
John S        Jhon Smith    

在另一个名为DescriptionDb的数据库中,有很多表Table1Table2Table3 ...。

FixedNamesDb 中的 Foreach Oldname 我需要搜索 DescriptionDb 中的所有表,如果 oldname 出现在任何字段中,我需要用 newName 替换它 p>

我在 DescriptionDb 中的所有表中搜索包含“John S”的字段并将其替换为“Jhon Smith”

有关如何自动执行此操作的任何帮助?使用脚本、查询或其他方式。

更多信息:

  • 每个名称仅在 DescriptionDb

  • 的一个表中出现一次
  • 所有名字都出现了(没有不存在的名字)

  • 所有名称都位于表的第二行(ID=2 的行)

非常感谢您的帮助。

【问题讨论】:

  • 如果两个数据库在同一个服务器你可以使用DatabaseName.SchemaName.TableName访问每个数据库表,如果你的数据库在不同的服务器你需要在两个服务器之间创建linkedserver
  • 两个数据库在同一个服务器。但我的问题是如何逐字段搜索整个表格以检查它是否等于我需要更改的名称

标签: sql sql-server-2008 replace


【解决方案1】:

对需要更新的每个表使用此脚本。

UPDATE
  DescriptionDb.Table1
SET
  Name = FN.NewName
SELECT
  FixedNamesDB.[All] AS FN
WHERE
  Name = FN.Oldname

以下脚本可以找到所有表和列。使用编程或脚本语言循环遍历所有表和列,将上述脚本中的 Table1Name 替换为以下脚本的所有迭代。

SELECT
  TABLES.TABLE_SCHEMA + '.' + TABLES.TABLE_NAME 'TABLE_NAME',
  COLUMNS.COLUMN_NAME,
  COLUMNS.DATA_TYPE,
  COLUMNS.CHARACTER_MAXIMUM_LENGTH
FROM 
  INFORMATION_SCHEMA.COLUMNS,
  INFORMATION_SCHEMA.TABLES
WHERE
  COLUMNS.TABLE_NAME = TABLES.TABLE_NAME
  AND TABLES.TABLE_SCHEMA = 'DescriptionDb'
ORDER BY
  TABLES.TABLE_SCHEMA,
  TABLES.TABLE_NAME,
  COLUMNS.COLUMN_NAME

【讨论】:

  • DescriptionDb 中的名称不在单个列中。感谢您的帮助
  • 你能说得更具体一点吗?他们是按名字和姓氏分开的吗?它们是随机分布在列中的吗?
  • 随机分布在列中。谢谢
  • 这正是我所需要的。你能告诉我如何将它们链接在一起吗?如何使用迭代?对不起,我对 sql 不是很有经验。非常感谢
  • 取决于您可以使用的编程/脚本语言将确定确切的实现。基本上,您将使用第二个查询的结果通过循环填充第一个查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2018-05-06
  • 2012-09-23
  • 1970-01-01
  • 2011-05-19
  • 2020-03-09
相关资源
最近更新 更多