Frage

ähnlich aber nicht identisch SQL Server 2000 - Abfrage eines Tabelle der Fremdschlüsselbeziehungen

ich ein T-SQL-Anweisung müssen die SQL 2000, die einen Tabellennamen angegeben, kehrt die Fremdschlüsselbeziehungen für diese Tabelle z funktionieren wird.

Tabelle MyFristTable hat einen Fremdschlüssel zu MySecondTable, wo MyFirstTable.ColA in MySecondTable.ColB sein muss. Ich würde erfreut sein, wenn die SQL-Anweisung (oder gespeicherte Prozedur) für MyFirstTable läuft und zurück eine Ergebnismenge auf den Linien von

Column | FK_Table      | FK_COLUMN
----------------------------------
ColA   | MySecondTable | ColB

NB : Ich habe Proben für SQL 2005, die, weil sie auf sys.foreign_key_columns verlassen wird nicht funktionieren

ich hätte lieber nicht die Ergebnisse der Sp_help Anweisung parsen.

Danke,

War es hilfreich?

Lösung

DECLARE @tableName sysname

SET @tableName = '' -- Your table name goes here

SELECT
    c.name
    , target.name
    , targetc.name
FROM
    -- source table
    sysobjects t
    -- source column
    INNER JOIN syscolumns c ON t.id = c.id
    -- general constraint
    INNER JOIN sysconstraints co ON t.id = co.id AND co.colid = c.colid
    -- foreign key constraint
    INNER JOIN sysforeignkeys fk ON co.constid = fk.constid
    -- target table
    INNER JOIN sysobjects target ON fk.rkeyid = target.id
    -- target column
    INNER JOIN syscolumns targetc ON fk.rkey = targetc.colid AND fk.rkeyid = targetc.id
WHERE
    t.name = @tableName

Hinweis Ich habe ich nur jene Systemansichten in SQL 2000 verwendet denken (dh die sysXXX diejenigen, anstatt die SQL 2005 sys.XXX sind), aber ich habe eigentlich nur diese in einer SQL getestet 2005 environemnt.

Andere Tipps

Ich hatte genau dieses Ding für eine Abfrage zu tun, und ich diese gespeicherte Prozedur gefunden, nachdem eine Version ähnlich wie die sys-Tabelle eines Versuch:

exec sp_fkeys @fktable_name = 'foo'

Es sieht aus wie dies in SQL Server 2000 . Auch fand ich, dass es in einigen Fällen waren geringfügige Unterschiede zwischen diesem gespeicherten proc und den Abfragen hier. Ich vermute, sp_fkeys die kanonische Version ist.

brauchte ich so etwas wie dies einmal, so dass ich nur auf den Quellcode des Systems gespeicherten Prozedur gesucht und kopiert, was ich in mein eigenes Verfahren benötigt und machte es arbeiten, wie ich brauchte.

Sie bei sp_helpconstraint Quellcode aussehen könnte ...

Das fand ich in google ... also, wenn diese Arbeit nicht mein Verdienst ist. Hoffe, dass es helfen,

 SELECT 
        FK_Table  = FK.TABLE_NAME, 
        FK_Column = CU.COLUMN_NAME, 
        PK_Table  = PK.TABLE_NAME, 
        PK_Column = PT.COLUMN_NAME, 
        Constraint_Name = C.CONSTRAINT_NAME 
    FROM 
        INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
        INNER JOIN 
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK 
            ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
        INNER JOIN 
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK 
            ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
        INNER JOIN 
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU 
            ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
        INNER JOIN 
        ( 
            SELECT 
                i1.TABLE_NAME, i2.COLUMN_NAME 
            FROM 
                INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 
                INNER JOIN 
                INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 
                ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
                WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
        ) PT 
        ON PT.TABLE_NAME = PK.TABLE_NAME 

    WHERE PK.TABLE_NAME='something'    -- the table for you are asking
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top