Я могу удалить таблицу, если она существует, используя следующий код, но не знаю, как сделать то же самое с ограничением:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
Я также добавляю ограничение, используя этот код:
ALTER TABLE [dbo].[TableName]
WITH CHECK ADD CONSTRAINT [FK_TableName_TableName2] FOREIGN KEY([FK_Name])
REFERENCES [dbo].[TableName2] ([ID])
go
sql
sql-server
sql-server-2005
tsql
solrevdev
источник
источник
constraint_object_id
а не простоobject_id
Это намного проще, чем текущее предлагаемое решение:
Если вам нужно удалить ограничение другого типа, это соответствующие коды для передачи в функцию OBJECT_ID () во втором положении параметра:
Вы также можете использовать OBJECT_ID без второго параметра.
Полный список типов здесь :
Тип объекта:
Относится к: SQL Server 2012 до SQL Server 2014.
источник
В SQL Server 2016 вы можете использовать DROP IF EXISTS:
Видеть Http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
источник
источник
Ответ Джеймса работает прекрасно, если вы знаете название фактического ограничения. Хитрость в том, что в устаревших и других реальных сценариях вы можете не знать как называется ограничение.
В этом случае вы рискуете создать дублирующиеся ограничения, чтобы избежать этого, вы можете использовать:
источник
источник
TRY..CATCH
блоке.источник
Я думаю, что это будет полезно для вас ...
Он удалит ограничение внешнего ключа на основе конкретной таблицы и столбца.
источник
Вы можете использовать эти запросы, чтобы найти все FK для вашей таблицы.
источник
Принятый ответ на этот вопрос, похоже, не работает для меня. Я добился того же с немного другим методом:
источник