Я хочу удалить все ограничения по умолчанию, проверить ограничения, уникальные ограничения, первичные ключи и внешние ключи из всех таблиц в базе данных SQL Server. Я знаю, как получить все имена ограничений sys.objects
, но как мне заполнить ALTER TABLE
часть?
sql-server
ddl
constraint
Аарон Бертран
источник
источник
Ответы:
Вы можете легко получить эту информацию, присоединившись
sys.tables.object_id = sys.objects.parent_object_id
к этим типам объектов.PRINT
это просто для наглядности - если у вас много ограничений, он может не отображать весь скрипт, потому что он ограничен 8K. В этих случаях см. Этот совет для других способов проверки скрипта перед запуском.Как только вы довольны результатом, раскомментируйте
EXEC
.источник
ORDER BY (CASE WHEN c.[type] IN ('PK', 'UQ') THEN 1 ELSE 0 END)
Я начал с принятого ответа и изменил структуру, чтобы использовать цикл while, а не создавать полный оператор SQL в динамическом SQL. Мне нравится это лучше по нескольким причинам.
Запрос не сохраняется в большой переменной @sql. Эта реализация допускает печать для каждого ограничения, которое отбрасывается для целей регистрации в выходных данных. Казалось, выполнение в моем модульном тестировании было немного быстрее.
источник