2015-03-02 4 views
7

Я хочу изменить имя столбца новое имя, присутствующее в таблицеПереименование столбца, не нарушая сценарии и хранимые процедуры

, но здесь проблемы я хочу, чтобы вручную изменить column name, присутствующий в Triggers или SP's.

Есть ли какой-либо лучший способ сделать это.

Чтобы rename столбец употребляет

sp_RENAME 'Tablename.old_Column', 'new_column' , 'COLUMN'; 

аналогично тому, как я могу это сделать для triggers или SP's.? без открытия каждого скрипта?

+5

Вы можете изменить имя столбца, а затем добавить вычисленный столбец с предыдущим именем столбца и изменить триггеры и хранимые процедуры на досуге. –

+0

Вы можете попытаться получить код сценария из таблиц sys, заменить и перекомпилировать его за один шаг, используя скрипт, но если нет большого количества объектов, я предпочитаю это делать, открывая каждый скрипт ради правильности – jean

+0

Также im MS-SQL вы можете использовать 'alter table dbo.tbBase alter column [OriginalName] UNIQUEIDENTIFIER не null GO' – jean

ответ

3

Ну, есть куча 3 инструментов сторонних производителей, которые являются перспективными этим типом «безопасного переименования», некоторые бесплатно, а некоторые нет:

  • ApexSQL имеет free tool для этого, так как MWillemse писал его ответа,
  • У RedGate есть коммерческий инструмент под названием SQLPrompt, который также имеет безопасную переименование, но он далеко не свободен.
  • Microsoft имеет визуальную студийную надстройку под названием SQL Server Data Tools (или SSDT в короткой версии), так как Dan Guzman написал в своем комментарии.

Должен сказать, что я никогда не пробовал какие-либо из этих конкретных инструментов для этой конкретной задачи, но у меня есть некоторый опыт работы с SSDT и некоторыми продуктами RedGate, и я считаю их очень хорошими инструментами. Я ничего не знаю об ApexSQL.

Другой вариант заключается в попытке написать сценарий SQL самостоятельно, однако есть несколько вещей, чтобы принять во внимание, прежде чем начать:

  • Может ли ваша таблица будет доступна непосредственно из вне сервера SQL? Я имею в виду, возможно ли, что какое-то программное обеспечение выполняет оператор sql непосредственно в этой таблице? Если это так, вы можете сломать его, когда вы переименуете этот столбец, и никакая утилита sql не поможет в этой ситуации.
  • Действительно ли ваши навыки написания сценариев sql действительно хороши? Я считаю себя достаточно опытным с сервером sql, но я думаю, что писать сценарий, подобный этому, не соответствует моим навыкам. Не то, чтобы это невозможно для меня, но, вероятно, потребуется слишком много времени и усилий для чего-то, что я могу получить бесплатно.

Если вы решили написать его самостоятельно, есть несколько статей, которые могут помочь вам в решении этой задачи:

во-первых, Microsoft официальную документацию sys.sql_expression_dependencies.
Во-вторых, статья под названием Different Ways to Find SQL Server Object Dependencies, написанная 13-летним опытом DBA, и, наконец, a related question на веб-сайте администратора базы данных StackExchange.

Вы можете, конечно, пойти безопасным способом, предложенным Гордоном Линоффом в его комментарии, или использовать синонимы, такие как данные назначения, предложенные в его ответе, но тогда вам придется вручную модифицировать все зависимости столбцов вручную и из того, что я понимаю, это то, чего вы хотите избежать.

1
  1. Переименование столбца таблицы
  2. Удаление столбца таблицы
  3. Alter Таблица Ключи

Лучший способ использования баз данных проектов в Visual Studio. см это ссылки

link 1

link 2

1
  1. вы можете делать то, что предложил @GorDon.

  2. Помимо этого, вы также можете играть с этим запросом,

выберите o.name, подкожно. * Из sys.syscomments СБН внутреннее соединение sys.objects о на sc.id = o.object_id где sc.text нравится «% oldcolumnname%»

это будет возвращать список всех прок и trigger.Also вы можете изменить фильтр, чтобы получить точную list.then это будет очень легко для вас, чтобы изменить ,вручную.

Но что бы вы ни решили, не просто бросайте старую колонку. Чтобы быть в безопасности, даже держите резервную копию.

0

Возможно, вы захотите заменить этот текст в определении. Однако вам понадобится выделенное соединение администратора на сервере sql. Версии также различаются при настройке специального подключения администратора. Настройка параметра запуска путем добавления: -T7806 в расширенном режиме. И добавив Admin: до имени сервера при входе в систему. К тому времени вы можете изменить значение определения.

Смежные вопросы