Mogę upuścić tabelę, jeśli istnieje, używając następującego kodu, ale nie wiem, jak zrobić to samo z ograniczeniem:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
Dodam również ograniczenie za pomocą tego kodu:
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
źródło
źródło
constraint_object_id
zamiast po prostuobject_id
Jest to o wiele prostsze niż obecnie proponowane rozwiązanie:
Jeśli musisz usunąć inny typ ograniczenia, są to odpowiednie kody, które należy przekazać do funkcji OBJECT_ID () w pozycji drugiego parametru:
Możesz także użyć OBJECT_ID bez drugiego parametru.
Pełna lista typów tutaj :
Rodzaj obiektu:
Dotyczy: SQL Server 2012 do SQL Server 2014.
źródło
W SQL Server 2016 możesz użyć DROP JEŚLI ISTNIEJE:
Zobacz http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
źródło
źródło
Odpowiedź Jamesa działa dobrze, jeśli znasz nazwę faktycznego ograniczenia. Trudne jest to, że w starszych i innych scenariuszach ze świata rzeczywistego możesz nie wiedzieć, jak nazywa się to ograniczenie.
W takim przypadku możesz stworzyć duplikaty ograniczeń, aby uniknąć, możesz użyć:
źródło
źródło
TRY..CATCH
bloku.źródło
Myślę, że to ci pomoże ...
Spowoduje to usunięcie ograniczenia klucza obcego na podstawie określonej tabeli i kolumny.
źródło
Możesz użyć tych zapytań, aby znaleźć wszystkie FK dla swojego stołu.
źródło
Akceptowana odpowiedź na to pytanie wydaje się nie działać dla mnie. Osiągnąłem to samo przy nieco innej metodzie:
źródło