У меня есть новая таблица, в которой есть ссылки внешнего ключа на несколько существующих таблиц. Когда я впервые создаю новую таблицу, я создал внешние ключи следующим образом:
ALTER TABLE [dbo].[NewTable] WITH CHECK ADD FOREIGN KEY([SectionDatabaseID])
REFERENCES [dbo].[Section] ([SectionDatabaseID])
ALTER TABLE [dbo].[NewTable] WITH CHECK ADD FOREIGN KEY([TermDatabaseID])
REFERENCES [dbo].[Term] ([TermDatabaseID])
Приведенный выше способ будет генерировать имена для ограничений внешнего ключа, используя собственное автоматическое соглашение об именах.
Однако я хочу удалить новую таблицу, потому что мне нужно внести некоторые серьезные изменения, создав ее с нуля.
Очевидно, что если я просто выполню оператор drop, база данных SQL Server будет жаловаться на то, что новая таблица имеет ссылки внешнего ключа на другие таблицы.
Я слышал о запуске следующего скрипта, чтобы выяснить, какие внешние ключи существуют, чтобы мы могли их удалить:
use perls;
SELECT 'ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME +
'] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']'
FROM information_schema.table_constraints
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' and TABLE_NAME = 'NewTable'
Вышеприведенное даст результаты, которые в основном показывают операторы alter, которые мне нужно запустить.
Мне нужно что-то более автоматизированное. Почему я должен отбрасывать каждое ограничение внешнего ключа отдельно, а затем иметь возможность отбрасывать только таблицу?
Я хочу удалить таблицу более простым способом. Это должно быть проще, чем то, что мне нужно сделать выше.
Drop table cascade
в tsql? См. stackoverflow.com/questions/4858488/< /а> - person Draco Ater   schedule 03.10.2012