الاستعلام للحصول على كل قيود المفاتيح الخارجية في SQL Server 2000
-
06-07-2019 - |
سؤال
أريد الاستعلام SQL Server 2000 للحصول على قائمة جميع المفاتيح الخارجية.
لا سيما جميع المفاتيح الخارجية التي تشير إلى عمود معين.
كيف يمكنني كتابة هذا الاستعلام?
المحلول
select * from sysobjects
where xtype = 'F'
وهذا ينبغي أن تفعل خدعة وتكون متوافقة مع SQL Server 2000، وآمل!
إذا كنت تحتاج بالإضافة إلى الجدول والمعلومات الأعمدة في SQL Server 2000، فإنه يحصل على أكثر قليلا المعنية؛ تحتاج إلى الانضمام إلى sysforeignkeys
وsyscolumns
وجهات النظر التسويقي مثل ذلك:
select
so.name 'foreign key name',
OBJECT_NAME(parent_obj) 'table',
OBJECT_NAME(sf.fkeyid) 'referencing table',
sc1.name 'referencing column',
OBJECT_NAME(sf.rkeyid) 'referenced table',
sc2.name 'referenced column'
from sysobjects so
inner join sysforeignkeys sf on so.id = sf.constid
inner join syscolumns sc1 on sf.fkeyid = sc1.id and sf.fkey = sc1.colid
inner join syscolumns sc2 on sf.rkeyid = sc2.id and sf.fkey = sc2.colid
where so.xtype in ('F','PK')
وإذا كنت ترغب في الاستفادة من وجهات نظر INFORMATION_SCHEMA التي تتوفر بالفعل في SQL Server 2000 استخدام هذا الاستعلام:
SELECT
rc.CONSTRAINT_NAME,
rcu.TABLE_NAME 'Referencing Table',
rcu.COLUMN_NAME 'Referencing Column',
rcu1.TABLE_NAME 'Referenced Table',
rcu1.COLUMN_NAME 'Referenced Column'
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu
ON rc.CONSTRAINT_CATALOG = rcu.CONSTRAINT_CATALOG
AND rc.CONSTRAINT_NAME = rcu.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu1
ON rc.UNIQUE_CONSTRAINT_CATALOG = rcu1.CONSTRAINT_CATALOG
AND rc.UNIQUE_CONSTRAINT_NAME = rcu1.CONSTRAINT_NAME
ومارك
نصائح أخرى
select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
إذا كنت بحاجة الى مزيد من المعلومات حول مفتاح ثم يمكنك الانضمام إلى وجهة النظر INFORMATION_SCHEMA.KEY_COLUMN_USAGE، الذي يحتوي على الأعمدة المشار إليه بواسطة المفتاح.
نظرة على مصدر sp_helpconstraint لمزيد من الأفكار ، ولكن يجب العمل...
للحصول على كل FK أن يشير إلى الهدف الجدول & العمود
- استبدال "YourTableName"
- uncomment آخر "و" وتعيين الهدف الخاص بك اسم العمود
كود:
--list all tables & columns that refer to the given table
select
k.name,pt.Name AS ParentTable,pc.name,c.constraint_column_id,ct.Name AS ReferedToTable,c.referenced_column_id,cc.Name
from sys.foreign_keys k
INNER JOIN sys.foreign_key_columns c ON k.parent_object_id=c.parent_object_id
INNER JOIN sys.objects pt ON c.parent_object_id=pt.object_ID
INNER JOIN sys.objects ct ON c.referenced_object_id=ct.object_ID
INNER JOIN sys.columns pc ON c.parent_object_id=pc.object_ID AND c.parent_column_id=pc.column_id
INNER JOIN sys.columns cc ON c.referenced_object_id=cc.object_ID AND c.referenced_column_id=cc.column_id
where k.referenced_object_id = object_id('YourTableName')
--AND pc.name='YourColumnName' --parent table column name
--AND cc.name='YourColumnName' --referenced table's column name