SQL 2000: T-SQL للحصول على علاقات المفاتيح الخارجية لجدول

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

سؤال

وعلى غرار كنها ليست متطابقة إلى SQL خادم 2000 - سؤال ل علاقات المفاتيح الخارجية الجدول

وأنا في حاجة الى بيان T-SQL التي ستعمل SQL 2000 أن يطلق عليها اسم الجدول، سيعود علاقات المفاتيح الخارجية لهذا الجدول منها مثلا.

والجدول MyFristTable لديه المفتاح الخارجي إلى MySecondTable، حيث يجب أن يكون MyFirstTable.ColA في MySecondTable.ColB. سأكون سعيدا، وإذا ركض عبارة SQL (أو بروك المخزنة) لMyFirstTable وعاد نتيجة تعيين على خطوط

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

على NB : للدي عينات لSQL 2005 التي لن تعمل لأنها تعتمد على sys.foreign_key_columns

وأنا أفضل أن لا يكون تحليل الخروج بنتائج بيان sp_help.

شكرا،

هل كانت مفيدة؟

المحلول

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

<قوية> ملاحظة لدي وأعتقد أن تستخدم فقط تلك الآراء النظام المتوفرة في SQL 2000 (أي تلك sysXXX بدلا من تلك sys.XXX SQL 2005) ولكن لقد اختبرت فقط في الواقع هذا في SQL 2005 environemnt.

نصائح أخرى

وكان علي أن أفعل هذا الشيء بالضبط للاستعلام، ولقد وجدت هذا الإجراء المخزن، بعد محاولة إصدار مثل الكثير من تميز الكلية طاولة واحدة:

exec sp_fkeys @fktable_name = 'foo'

ويبدو أن هذا هو متاح في 2000 . أيضا، لقد وجدت أنه في حالات قليلة كانت هناك اختلافات طفيفة بين هذه بروك المخزنة والاستعلامات هنا. انا التخمين sp_fkeys هي النسخة الأساسية.

وأنا بحاجة لشيء مثل هذا مرة واحدة، لذلك أنا فقط نظرت في شفرة المصدر الإجراء المخزن النظام ونسخ ما أنا في حاجة إلى إجراء بلدي وجعلت من العمل كما كنت بحاجة.

وكنت قد ننظر في شفرة المصدر sp_helpconstraint في ...

ولقد وجدت هذا في جوجل ... حتى لو كان هذا العمل ليس من واجبي الجدارة. نأمل أن تساعدك

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