SQL 2000:T-SQL来得到一个表的外键关系(SQL 2000: T-SQL to get f

2019-07-29 02:18发布

相似但不相同,以SQL Server 2000中-查询表的外键关系

我需要一个T-SQL语句,将工作SQL 2000给定一个表名,将返回外键关系该表如

表MyFristTable有一个外键MySecondTable,其中MyFirstTable.ColA必须在MySecondTable.ColB。 我会很高兴,如果SQL语句(或存储过程)的竞选MyFirstTable并恢复了对行的结果集

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

:我对SQL 2005的样品,因为它们依赖于sys.foreign_key_columns这是行不通的

我宁愿没有解析出的sp_help语句的结果。

谢谢,

Answer 1:

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的人,而不是SQL 2005 sys.XXX的),但我只实际上在SQL 2005 environemnt测试这一点。



Answer 2:

我不得不这样做确切的事情了查询,我发现这个存储过程,试图很像SYS表的一个版本后:

exec sp_fkeys @fktable_name = 'foo'

看起来这是可用的SQL Server 2000 。 另外,我发现,在少数情况下有此存储过程,在这里查询之间的细微差别。 我猜sp_fkeys是规范的版本。



Answer 3:

我需要这样的一次,所以我只是看着系统存储过程的源代码,并复制我需要什么到我自己的程序和作出我需要它的工作。

你可能看sp_helpconstraint来的源代码...



Answer 4:

我发现这在谷歌...因此,如果这个工作不是我的优点。 希望它能帮助

 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


文章来源: SQL 2000: T-SQL to get foreign key relationships for a table