Sql server 如何查找包含任意列名的表的外键

Sql server 如何查找包含任意列名的表的外键,sql-server,tsql,Sql Server,Tsql,我想找到一组包含以下内容的表格: 特定表的外键约束,以及 另一个任意列名 我正在使用: EXEC sp_fkeys 'MyTable' 这会将所有带有外键约束的表返回到“MyTable”,但我想做额外的筛选 由于我的数据库中有一个特别大的结果表列表,因此我希望通过包含任意列名的表来过滤FKTABLE\u NAME,例如CreatedOn,它本身不一定是链接列。类似的内容将查找包含要使用的FK的表“yourtablename”,其中引用表有一列“yourcolumnname” 类似的内容将查

我想找到一组包含以下内容的表格:

  • 特定表的外键约束,以及
  • 另一个任意列名
我正在使用:

EXEC sp_fkeys 'MyTable'
这会将所有带有外键约束的表返回到“MyTable”,但我想做额外的筛选


由于我的数据库中有一个特别大的结果表列表,因此我希望通过包含任意列名的表来过滤
FKTABLE\u NAME
,例如
CreatedOn
,它本身不一定是链接列。

类似的内容将查找包含要使用的FK的表“yourtablename”,其中引用表有一列“yourcolumnname”


类似的内容将查找包含FK到“yourtablename”的表,其中引用表有一列“yourcolumnname”


您将在下面获得一个列列表。然后,您可以选择不同的表名并应用所需的任何其他筛选器

--build your temp table with output of SP_FKeys

    CREATE TABLE #Temp (
    PKTABLE_QUALIFIER  VARCHAR(100),
    PKTABLE_OWNER   VARCHAR(100),
    PKTABLE_NAME  VARCHAR(100),
    PKCOLUMN_NAME  VARCHAR(100),
    FKTABLE_QUALIFIER  VARCHAR(100),
    FKTABLE_OWNER  VARCHAR(100),
    FKTABLE_NAME      VARCHAR(100),
    FKCOLUMN_NAME       VARCHAR(100),
    KEY_SEQ INT,
    UPDATE_RULE  int,
    DELETE_RULE  int,
    FK_NAME  VARCHAR(100),
    PK_NAME  VARCHAR(100),
    DEFERRABILITY int
)
--Populate it
INSERT INTO #Temp
EXEC sp_fkeys @pktable_name = N'Department'  
    ,@pktable_owner = N'HumanResources';  

--Now, join to systables and syscolums
    SELECT * FROM #Temp TEMP JOIN sys.tables ST ON TEMP.FKTABLE_NAME = ST.name 
    JOIN sys.columns SC ON ST.object_id = SC.object_id
    WHERE SC.name = 'CreatedOn' --enter your column name here

您将在下面获得一个列列表。然后,您可以选择不同的表名并应用所需的任何其他筛选器

--build your temp table with output of SP_FKeys

    CREATE TABLE #Temp (
    PKTABLE_QUALIFIER  VARCHAR(100),
    PKTABLE_OWNER   VARCHAR(100),
    PKTABLE_NAME  VARCHAR(100),
    PKCOLUMN_NAME  VARCHAR(100),
    FKTABLE_QUALIFIER  VARCHAR(100),
    FKTABLE_OWNER  VARCHAR(100),
    FKTABLE_NAME      VARCHAR(100),
    FKCOLUMN_NAME       VARCHAR(100),
    KEY_SEQ INT,
    UPDATE_RULE  int,
    DELETE_RULE  int,
    FK_NAME  VARCHAR(100),
    PK_NAME  VARCHAR(100),
    DEFERRABILITY int
)
--Populate it
INSERT INTO #Temp
EXEC sp_fkeys @pktable_name = N'Department'  
    ,@pktable_owner = N'HumanResources';  

--Now, join to systables and syscolums
    SELECT * FROM #Temp TEMP JOIN sys.tables ST ON TEMP.FKTABLE_NAME = ST.name 
    JOIN sys.columns SC ON ST.object_id = SC.object_id
    WHERE SC.name = 'CreatedOn' --enter your column name here

这个问题一点也不清楚。你想在这里做什么?类似这样的事情?
从所有列acc中选择acc.table\u名称、acc.column\u名称、acc.constraint\u名称、cnst.owner\u所有者、cnst.r\u所有者、c\u pk.table\u名称r\u表\u名称、c\u pk.constraint\u名称r\u pk acc从所有列acc加入所有约束cnst ON acc.owner=cnst.owner\uacc.constraint\u name=cnst.constraint\u name在cnst.r\u owner=c\u pk.owner和cnst.r\u constraint\u name=c\u pk.constraint\u name其中cnst.constraint\u type='r'
这个问题一点也不清楚。你想在这里做什么?类似这样的事情?
选择acc.table\u name,acc.column_name,acc.constraint_name,cnst.owner,cnst.r_owner,c_pk.table_name r_table_name,c_pk.constraint_name r_pk所有列acc JOIN all_constraint acc.owner=cnst.owner和acc.constraint_name=cnst.constraint_name JOIN all_constraint c_pk ON cnst.r_owner=c_pk.owner=c_和cnst.r\u constraint\u name=c\u pk.constraint\u name,其中cnst.constraint\u type='r'