sql serverは、テーブルの外部キー参照をクエリーします(外部キーを結合します)

1975 ワード

まずプライマリ・テーブルを作成します.
CREATE TABLE
    dbo.TestMain
    (
        col1 bigint,
        col2 bigint,
        col3 bigint,
        PRIMARY KEY (col1, col2)      --    
    )

スレーブテーブルをもう1つ作成するには、次の手順に従います.
CREATE TABLE
    AccountsData.dbo.TestSlave
    (
        s1 bigint       ,
        s2 bigint       ,
        s3 bigint       ,
        s4 bigint       ,
        PRIMARY KEY (s1),            --     
        CONSTRAINT TestSlave_fk1 FOREIGN KEY (s2, s3) REFERENCES AccountsData.dbo.TestMain (col1, col2)  --     (  ,      ,     )
    )    

ポイントデータを作成するには、実はここでも使えませんが、着信データのほうがいいので、外部キーの参照関係を理解するのに役立ちます.
insert TestMain (col1,col2,col3)
select 1,1,0 union
select 1,2,0 union
select 1,3,0 union
select 2,2,0


insert TestSlave (s1,s2,s3,s4)
select 1,1,1,0 union
select 2,1,2,0 union
select 3,1,3,0 union
select 4,2,2,0

select * from TestMain
select * from TestSlave

テーブルの外部キー参照をクエリーする(外部キーを結合する)sqlは、次のようになります.
SELECT
    fk.name     fkname    ,
    ftable.name ftablename,
    fcn.name    fkcol     ,
    rtable.name ftablename,
    rcn.name    rkcol
FROM
    sysforeignkeys
JOIN
    sysobjects fk ON sysforeignkeys.constid = fk.id
JOIN
    sysobjects ftable ON sysforeignkeys.fkeyid = ftable.id
JOIN
    sysobjects rtable ON sysforeignkeys.rkeyid = rtable.id
JOIN
    syscolumns fcn ON sysforeignkeys.fkeyid = fcn.id AND sysforeignkeys.fkey = fcn.colid
JOIN
    syscolumns rcn ON sysforeignkeys.rkeyid = rcn.id AND sysforeignkeys.rkey = rcn.colid
WHERE
    ftable.id = Object_ID('TestSlave')             --table name

「結合外部キー」の場合、外部キーはすべて外部キー名があり、統一外部キー名には複数のレコードがあります(いくつかのcolumnsが結合外部キーを構成し、いくつかのレコードがあります!):
fkname         ftablename  fkcol  ftablename  rkcol  
-------------  ----------  -----  ----------  -----  
TestSlave_fk1  TestSlave   s2     TestMain    col1   
TestSlave_fk1  TestSlave   s3     TestMain    col2