Script SQL pour trouver des clés étrangères à une table spécifique?
y a-t-il une requête qui me donnera des clés étrangères dirigées vers une colonne de table spécifique? Par exemple, disons que j'avais ces trois tables:
__________
|Table A |
----------
|Id |
----------
___________
|Table B |
-----------
|Id |
|TableAId | (Foreign Key to TableA.Id)
-----------
___________
|Table C |
-----------
|Id |
|TableAId | (Foreign Key to TableA.Id)
-----------
j'ai besoin d'une requête "Select * les Clés Étrangères dirigé au TableA.Id" retourné "Tableau C: TableAId", "Tableau B: TableAId". Je suis en train de parcourir certaines vues du système INFORMATION_SCHEMA, et il semble que je peux facilement voir quelles clés étrangères appartiennent à la Table A, ou la Table B individuellement, mais je ne peux pas trouver où il est dit "La Table C a une clé étrangère pour la Table A" en particulier. Je peux comprendre les détails de la requête, Je ne peux pas trouver les vues que je cherche (ou je les passe sous silence). Toute aide serait appréciée.
2 réponses
SELECT
f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,
fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id,
fc.referenced_column_id) AS ReferenceColumnName
FROM
sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
ajout de dynamic drop et de create ON dbo scheme.
DECLARE @l varchar(1) = char(13);
DECLARE @referenced_object_id varchar(MAX) = 'Replace_With_PK_Table_Name';
SELECT
fk.name AS ForeignKey,
OBJECT_NAME(fk.parent_object_id) AS TableName,
COL_NAME(fkc.parent_object_id,
fkc.parent_column_id) AS ColumnName,
OBJECT_NAME (fk.referenced_object_id) AS ReferenceTableName,
COL_NAME(fkc.referenced_object_id,
fkc.referenced_column_id) AS ReferenceColumnName,
'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] DROP CONSTRAINT ['+fk.name+'];' DropFK,
'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] WITH NOCHECK ADD CONSTRAINT ['+fk.name+'] FOREIGN KEY(['+COL_NAME(fkc.referenced_object_id,
fkc.referenced_column_id)+'])'+ @l +
' REFERENCES [dbo].['+OBJECT_NAME(fk.referenced_object_id)+'] (['+COL_NAME(fkc.referenced_object_id,
fkc.referenced_column_id)+'])'+ @l +
' ON UPDATE CASCADE'+ @l +
' ON DELETE CASCADE;'+ @l +
'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] CHECK CONSTRAINT ['+fk.name+'];' CreateFK
FROM
sys.foreign_keys AS fk
INNER JOIN sys.foreign_key_columns AS fkc ON fk.OBJECT_ID = fkc.constraint_object_id
WHERE OBJECT_NAME(fk.referenced_object_id)=@referenced_object_id