Ich habe diese SQL:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
In einigen anderen Datenbanken, die wir verwenden, hat die Einschränkung anscheinend einen anderen Namen. Wie kann ich überprüfen , ob es eine Einschränkung mit dem Namen ist FK_ChannelPlayerSkins_Channels
.
sql-server
information-schema
system-tables
Lieven Cardoen
quelle
quelle
Antworten:
Versuche dies:
- BEARBEITEN -
Als ich diese Frage ursprünglich beantwortete, dachte ich an "Fremdschlüssel", weil in der ursprünglichen Frage nach dem Finden von "FK_ChannelPlayerSkins_Channels" gefragt wurde. Seitdem haben viele Leute kommentiert, andere "Einschränkungen" zu finden. Hier sind einige andere Fragen dazu:
Hier ist eine alternative Methode
Wenn Sie noch mehr Informationen zu Einschränkungen benötigen, sehen Sie in der gespeicherten Systemprozedur
master.sys.sp_helpconstraint
nach, wie Sie bestimmte Informationen erhalten. Um den Quellcode mit SQL Server Management Studio anzuzeigen, rufen Sie den "Objekt-Explorer" auf. Von dort aus erweitern Sie die Datenbank "Master", dann "Programmierbarkeit", dann "Gespeicherte Prozeduren" und dann "Systemgespeicherte Prozeduren". Sie können dann "sys.sp_helpconstraint" finden und mit der rechten Maustaste darauf klicken und "Ändern" auswählen. Achten Sie nur darauf, keine Änderungen daran zu speichern. Sie können diese gespeicherte Systemprozedur auch einfach für jede Tabelle verwenden, indem Sie sie wie folgt verwendenEXEC sp_helpconstraint YourTableNameHere
.quelle
Die einfachste Möglichkeit, das Vorhandensein einer Einschränkung zu überprüfen (und sie dann zu löschen, falls vorhanden), ist die Verwendung der Funktion OBJECT_ID () ...
OBJECT_ID kann ohne den zweiten Parameter verwendet werden ('C' nur für Prüfbedingungen). Dies funktioniert möglicherweise auch. Wenn Ihr Einschränkungsname jedoch mit dem Namen anderer Objekte in der Datenbank übereinstimmt, erhalten Sie möglicherweise unerwartete Ergebnisse.
OBJECT_ID kann auch mit anderen "Einschränkungen" wie Fremdschlüsseleinschränkungen oder Primärschlüsseleinschränkungen usw. verwendet werden. Um optimale Ergebnisse zu erzielen, geben Sie immer den entsprechenden Objekttyp als zweiten Parameter für die Funktion OBJECT_ID an:
Einschränkungsobjekttypen:
Beachten Sie auch, dass das Schema häufig erforderlich ist. Das Schema der Einschränkungen übernimmt im Allgemeinen das Schema der übergeordneten Tabelle.
Wenn Sie Ihre Einschränkungen (oder was auch immer Sie überprüfen) bei Verwendung dieser Methode nicht in Klammern setzen, kann dies ebenfalls zu einem falsch negativen Ergebnis führen. Wenn Ihr Objekt ungewöhnliche Zeichen (z. B. a.) Verwendet, sind die Klammern erforderlich.
quelle
OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1
, um von der aktuellen Version bis hin zu sql2000 kompatibel zu sein. Auch keindbo
Schema erforderlich.Wenn Sie nach einer anderen Art von Einschränkung suchen, z. B. Standardeinstellungen , sollten Sie eine andere Abfrage verwenden (Aus Wie finde ich eine Standardeinschränkung mit INFORMATION_SCHEMA? Beantwortet von devio ). Verwenden:
um eine Standardeinschränkung nach Namen zu finden.
Ich habe in meinem Beitrag " DDL ", wenn nicht vorhanden " verschiedene" Zusammenstellungen "zusammengestellt, um SQL-Skripte wieder ausführbar zu machen.
quelle
quelle
Wenn Sie sich so etwas ansehen, wird unten in SQL Server 2005 getestet
quelle
Nur etwas, auf das man achten muss ......
In SQL Server 2008 R2 SSMS erzeugt der Befehl "Skriptbeschränkung als -> DROP And CREATE To" T-SQL wie unten
Dieses Skript löscht die Einschränkung NICHT, da SELECT 0 Zeilen zurückgibt. (siehe Beitrag Microsoft Connect ).
Der Name der Standardeinschränkung ist falsch, aber ich habe festgestellt, dass er auch etwas mit der Funktion OBJECT_ID zu tun hat, da das Ändern des Namens das Problem nicht behebt.
Um dies zu beheben, habe ich die Verwendung von OBJECT_ID entfernt und stattdessen den Standard-Einschränkungsnamen verwendet.
quelle
OBJECT_ID(N'[YourSchema].[DEF_Detail_IsDeleted]')
wenn Sie zwei gleichnamige Einschränkungen in verschiedenen Schemata haben.Ich verwende die folgende Abfrage, um nach einer vorhandenen Einschränkung zu suchen, bevor ich sie erstelle.
Hiermit wird die Einschränkung nach Namen abgefragt, die auf einen bestimmten Tabellennamen abzielen. Hoffe das hilft.
quelle
quelle
quelle
INFORMATION_SCHEMA
ist dein Freund. Es verfügt über alle Arten von Ansichten, in denen alle Arten von Schemainformationen angezeigt werden. Überprüfen Sie Ihre Systemansichten. Sie werden feststellen, dass Sie drei Ansichten haben, die sich mit Einschränkungen befassen, eine davonCHECK_CONSTRAINTS
.quelle
Ich benutze dies, um nach und entfernten Einschränkungen für eine Spalte zu suchen. Es sollte alles haben, was Sie brauchen.
quelle
quelle
Sie können die oben genannte mit einer Einschränkung verwenden:
Sie müssen das verwenden,
name = [Constraint name]
da eine Tabelle möglicherweise mehrere Fremdschlüssel enthält und der Fremdschlüssel immer noch nicht überprüft wirdquelle