Ich liste alle FK-Beschränkungen für eine bestimmte Tabelle mit INFORMATION_SCHEMA
Menge von Ansichten mit der folgenden Abfrage:
SELECT X.UNIQUE_CONSTRAINT_NAME,
"C".*, "X".*
FROM "INFORMATION_SCHEMA"."KEY_COLUMN_USAGE" AS "C"
INNER JOIN "INFORMATION_SCHEMA"."REFERENTIAL_CONSTRAINTS" AS "X"
ON "C"."CONSTRAINT_NAME" = "X"."CONSTRAINT_NAME"
AND "C"."TABLE_NAME" = 'MY_TABLE'
AND "C"."TABLE_SCHEMA" = 'MY_SCHEMA'
Alles funktioniert einwandfrei, aber bei einer bestimmten Bedingung ist der Wert von UNIQUE_CONSTRAINT_NAME
Spalte ist falsch, und ich brauche sie, um zusätzliche Informationen aus der referenzierten Spalte zu finden. Grundsätzlich ist für die meisten Zeilen die UNIQUE_CONSTRAINT_NAME
enthält den Namen der eindeutigen Einschränkung (oder PK) in der referenzierten Tabelle, aber für eine bestimmte FK
ist der Name einer anderen eindeutigen Einschränkung.
Ich habe die FK gelöscht und neu erstellt - das hat nicht geholfen.
Ich vermute, dass die Metadaten irgendwie durcheinander geraten sind. Gibt es eine Möglichkeit, die Metadaten neu zu erstellen, so dass die INFORMATION_SCHEMA
Ansichten tatsächlich die richtigen Daten anzeigen würden?
edit-1: Beispiel-DB-Struktur
CREATE TABLE MY_PARENT_TABLE (
ID INTEGER,
NAME VARCHAR,
--//...
CONSTRAINT MY_PARENT_TABLE_PK PRIMARY KEY CLUSTERED (ID)
)
CREATE UNIQUE NONCLUSTERED INDEX MY_PARENT_TABLE_u_nci_ID_LongName ON MY_PARENT_TABLE (ID ASC) INCLUDE (SOME_OTHER_COLUMN)
CREATE TABLE MY_CHILD_TABLE (
ID INTEGER,
PID INTEGER,
NAME VARCHAR,
CONSTRAINT MY_CHILD_TABLE_PK PRIMARY KEY CLUSTERED (ID)
,CONSTRAINT MY_CHILD_TABLE__MY_PARENT_TABLE__FK
FOREIGN KEY (PID)
REFERENCES MY_PARENT_TABLE (ID)
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
Ich erwarte, dass die UNIQUE_CONSTRAINT_NAME
zu sein MY_PARENT_TABLE_PK
sondern was ich bin bekomme ist MY_PARENT_TABLE_u_nci_ID_LongName
.
Nachdem ich mir die Struktur angeschaut habe, sehe ich, dass es in der Tat 2 UNIQUE
Flecken auf dieser Spalte - PK
y el MY_PARENT_TABLE_u_nci_ID_LongName
. Die eigentliche Frage sollte also lauten: Warum wird ein anderer eindeutiger Index genommen und nicht der PK?