4

SQL Server 2000と類似していますが、同一ではありません-テーブルの外部キー関係をクエリします

テーブル名を指定するとSQL2000が機能し、そのテーブルの外部キー関係を返すT-SQLステートメントが必要です。

テーブルMyFristTableには、MySecondTableへの外部キーがあります。MyFirstTable.ColAはMySecondTable.ColBに含まれている必要があります。sqlステートメント(またはストアドプロシージャ)がMyFirstTableに対して実行され、次の行に結果セットが返された場合は、喜んでいます。

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

注意:sys.foreign_key_columnsに依存しているために機能しないSQL2005のサンプルがあります

sp_helpステートメントの結果を解析する必要はありません。

ありがとう、

4

4 に答える 4

13

クエリに対してこれとまったく同じことをしなければなりませんでしたが、sysテーブル1によく似たバージョンを試した後、このストアドプロシージャを見つけました。

exec sp_fkeys @fktable_name = 'foo'

これはSQLServer2000で利用できるようです。また、いくつかのケースでは、このストアドプロシージャとここのクエリの間に小さな違いがあることがわかりました。sp_fkeysが正規バージョンだと思います。

于 2010-02-16T16:53:43.677 に答える
6
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

SQL2000で使用可能なシステムビュー(つまり、SQL 2005sys.XXXではなくsysXXXビュー)のみを使用したと思いますが、実際にこれをテストしたのはSQL2005環境のみです。

于 2009-06-22T12:03:41.807 に答える
1

私はグーグルでこれを見つけました...それで、この仕事が私のメリットでないなら。お役に立てば幸いです

 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
于 2009-06-22T11:46:02.107 に答える
1

一度このようなものが必要だったので、システムストアドプロシージャのソースコードを見て、必要なものを自分のプロシージャにコピーして、必要に応じて動作させました。

sp_helpconstraintのソースコードを見るかもしれません...

于 2009-06-22T11:53:43.353 に答える