Ich kann eine Tabelle löschen, wenn sie mit dem folgenden Code vorhanden ist, weiß aber nicht, wie ich dasselbe mit einer Einschränkung tun soll:
IF EXISTS(SELECT 1 FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'TableName') AND type = (N'U')) DROP TABLE TableName
go
Ich füge auch die Einschränkung mit diesem Code hinzu:
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
quelle
quelle
constraint_object_id
anstatt nurobject_id
Dies ist viel einfacher als die derzeit vorgeschlagene Lösung:
Wenn Sie eine andere Art von Einschränkung löschen müssen, sind dies die zutreffenden Codes, die an der zweiten Parameterposition an die Funktion OBJECT_ID () übergeben werden:
Sie können OBJECT_ID auch ohne den zweiten Parameter verwenden.
Vollständige Liste der Typen hier :
Objekttyp:
Gilt für: SQL Server 2012 bis SQL Server 2014.
quelle
In SQL Server 2016 können Sie DROP IF EXISTS verwenden:
Siehe http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016.aspx
quelle
quelle
James 'Antwort funktioniert einwandfrei, wenn Sie den Namen der tatsächlichen Einschränkung kennen. Das Schwierige ist, dass Sie in Legacy- und anderen realen Szenarien möglicherweise nicht wissen, wie die Einschränkung heißt.
Wenn dies der Fall ist, besteht die Gefahr, dass Sie doppelte Einschränkungen erstellen. Um dies zu vermeiden, können Sie Folgendes verwenden:
quelle
quelle
TRY..CATCH
Block.quelle
Ich denke, das wird dir helfen ...
Die Fremdschlüsseleinschränkung wird basierend auf einer bestimmten Tabelle und Spalte gelöscht.
quelle
Mit diesen Abfragen können Sie alle FKs für Ihre Tabelle finden.
quelle
Die akzeptierte Antwort auf diese Frage scheint für mich nicht zu funktionieren. Ich habe dasselbe mit einer etwas anderen Methode erreicht:
quelle