Справочная информация: некоторые из наших ограничений на столбцы по умолчанию были созданы без явных имен, поэтому мы получаем забавные имена, которые варьируются от сервера к серверу, например: DF__User__TimeZoneIn__5C4D869D
Я бы предпочел, чтобы все они управлялись с единообразными именами, DF_Users_TimeZoneInfo
чтобы мы могли гарантировать наличие соответствующих ограничений для будущих целевых таблиц (как в сравнении RedGate или даже просто визуально).
У меня есть скрипт, который в основном работает для того, что я хочу:
select 'sp_rename N''[' + s.name + '].[' + d.name + ']'',
N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';'
from sys.tables t
join
sys.default_constraints d
on d.parent_object_id = t.object_id
join
sys.columns c
on c.object_id = t.object_id
and c.column_id = d.parent_column_id
join sys.schemas s
on t.schema_id = s.schema_id
WHERE d.NAME like 'DF[_][_]%'
Но это просто дает мне набор результатов, а не то, что я могу фактически передать в exec или что-то еще.
Как я могу сделать это, чтобы я мог просто выполнить эти sp_rename
сценарии, не прибегая к копированию всех возвращенных элементов и вставке их в новое окно запроса и их повторному запуску? Пытаясь сохранить как можно больше нажатий клавиш, чтобы я мог исправить это во многих средах.
источник
Ответы:
Хорошо, пара вещей.
EXEC
при выполнении хранимых процедур; сокращение безEXEC
работает только тогда, когда это первый оператор в пакете (и это не будет иметь место здесь).QUOTENAME()
вместо того, чтобы вручную применять квадратные скобки. В этом случае вы, вероятно, в безопасности, но есть случаи, когда ручной подход сломается.вы можете проверить
PRINT
вывод, но он не обязательно будет полным, если ваша общая команда> 8k (см. этот совет для некоторых альтернативных подходов ).источник
sp_help; sp_help;
.Исходя из вашего вопроса .. который вы удалили "автоматизируйте один и тот же скрипт в некоторых базах данных в экземпляре"
Ниже приведен код, который поможет вам
источник