3 Stimmen

Falscher Wert für UNIQUE_CONSTRAINT_NAME in REFERENTIAL_CONSTRAINTS

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X