Рефакторинг переименовывает поле во многих таблицах базы данных - PullRequest
0 голосов
/ 26 сентября 2011

Я столкнулся с переименованием поля, где одно и то же имя поля реплицируется во многих таблицах.

Ищите сценарий или бесплатный / недорогой инструмент, который пройдет через все таблицы и, если поле A существует, переименуйте его в Field B.

спасибо

Ответы [ 3 ]

2 голосов
/ 26 сентября 2011

Вы можете использовать таблицы метаданных SQL Server для создания динамических операторов SQL для своих целей.Для списка доступных таблиц вы можете sys.tables для списка таблиц и sys.columns для списка столбцов.Используя эти таблицы, вы можете создать таблицу операторов SQL.Для выполнения динамических sqls вам нужно sp_executesql хранимая процедура.

Это пример кода, просто чтобы показать, как использовать таблицы метаданных и sp_executesql: и обратите внимание, что я использовал другие таблицы метаданных, которые яболее комфортно с.Также вы можете использовать курсор для запуска всех скриптов, возвращаемых запросом.

CREATE Database TestDB

CREATE Table Table1 (Id int , fieldA varchar(50) )

Declare @update_query nvarchar(max)

select 
    @update_query = 'sp_rename ''' + t.TABLE_NAME + '.' + c.COLUMN_NAME + ''',''' + 'fieldB' + ''''
From INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
WHERE
    c.COLUMN_NAME = 'fieldA'

SELECT @update_query

EXEC sp_executesql @update_query
1 голос
/ 26 сентября 2011

Посмотрите на тип проекта базы данных в VS2010, если вы еще этого не сделали.Он обладает множеством функций, которые упрощают рефакторинг БД по сравнению с работой SQL Server Management Studio.

Например, если вы переименуете столбец, он даст вам ошибки сборки для всех FK, которые ссылаются на старое имя столбца.И это делает много проверки во время сборки, чтобы убедиться, что ваши объекты базы данных не ссылаются на объекты, которые больше не существуют.И поскольку все объекты базы данных просто хранятся в виде текстовых файлов, такие действия, как переименование, в значительной степени просто поиск / замена.

Кроме того, он имеет очень удобную функцию «синхронизации», которая сравнивает сценарии и базы данных проекта БДгенерирует отчет DIFF и генерирует сценарии для перемещения выбранных изменений между ними (либо проект БД на SQL Server, либо наоборот).

Сказав все это, он не будет автоматически переименовывать вас- другими словами, когда вы переименовываете столбец, он не исправит все ссылки на этот столбец в проекте.Но если вы допустите ошибку, вы получите ошибки сборки при проверке структуры базы данных.Так что, по крайней мере, легко найти места, которые вам нужно изменить.

0 голосов
/ 12 января 2016

Если вы используете Azure SQL Server, вы можете использовать ответ Сэма с другим входным параметром для sp_rename, @objtype = 'COLUMN'.

Declare @update_query nvarchar(max)

select 
    @update_query = 'sp_rename ''' + t.TABLE_NAME + '.' + c.COLUMN_NAME + ''',''' + 'fieldB' + ''',''' + 'COLUMN' + ''''
From INFORMATION_SCHEMA.COLUMNS c JOIN INFORMATION_SCHEMA.Tables t ON c.TABLE_CATALOG = t.TABLE_CATALOG AND c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
WHERE
    c.COLUMN_NAME = 'fieldA'

SELECT @update_query

EXEC sp_executesql @update_query
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...