SQL 2000: T-SQL Fremdschlüsselbeziehungen für einen Tisch zu bekommen
-
06-07-2019 - |
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,
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