SQL查询或脚本,用于从另一个数据库中搜索和替换数据库中的所有旧名称

时间:2011-12-12 17:35:07

标签: sql sql-server-2008 replace

您好我正在研究SQL数据库

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

我有一个名为 FixedNamesDb 的数据库 在数据库上有一个名为全部

的表

它与此类似(这是一个例子):

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

在另一个名为 DescriptionDb 的数据库中有很多表表1 表2 表3 ....

FixedNamesDb 中的Foreach Oldname我需要搜索 DescriptionDb 中的所有表格,如果oldname出现在任何字段中,我需要将其替换为newName

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

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

更多信息:

  • 每个名称只在 DescriptionDb

  • 的一个表格中出现一次
  • 显示所有名称(没有名称不存在)

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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