الاستعلام للحصول على كل قيود المفاتيح الخارجية في SQL Server 2000

StackOverflow https://stackoverflow.com/questions/831589

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top