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'