SQL-запрос или скрипт для поиска и замены всех старых имен в базе данных новыми из другой базы данных. - PullRequest
1 голос
/ 12 декабря 2011

Здравствуйте, я работаю над базой данных 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 Существует множество таблиц Table1 , Table2 , Table3 ....

Foreach Oldname в FixedNamesDb IМне нужно найти все таблицы в DescriptionDb , и если в каком-либо поле появляется старое имя, мне нужно заменить его на новое

. Я ищу все таблицы в ОписаниеDb для поля, содержащего "John S" и замените его на "Jhon Smith"

Любая помощь о том, как сделать это автоматически?Использование сценария, запроса или чего-то еще.

Дополнительная информация:

  • Каждое имя появляется только один раз в одной из таблиц DescriptionDb

  • Появляются все имена (имя не существует)

  • Все имена находятся во второй строке таблицы(Строка, где ID = 2)

Большое спасибо за любую помощь.

1 Ответ

2 голосов
/ 12 декабря 2011

Используйте этот скрипт для каждой таблицы, которую нужно обновить.

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

Следующий скрипт может найти все таблицы и столбцы. Использование языка программирования или скриптового цикла проходит по всем таблицам и столбцам, заменяя Table1 и Name в приведенном выше сценарии на все итерации приведенного ниже сценария.

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
...