取得所有外键内容的脚本

近来有个任务要找出SQL Server 2005某个数据库里所有的外键,包括外键表/列名、引用表/列名。随手写了个脚本,放在这里备忘。

-- This script scans your database and stores all FK information,
-- including source table/column and reference table/column.
-- Then it will store this information into table fk,
-- which is created at the beginning.


--- USE [YourDatabaseNameHere];

--- GO
IF NOT EXISTS (SELECT name
FROM sys.tables
WHERE name = N'fk')
BEGIN
CREATE TABLE [dbo].[fk] (
[id] [INT] IDENTITY ( 1 , 1 ) NOT NULL,
[stable] [NVARCHAR](255) NULL,
[scolumn] [NVARCHAR](255) NULL,
[rtable] [NVARCHAR](255) NULL,
[rcolumn] [NVARCHAR](255) NULL,
CONSTRAINT [fk_pk] PRIMARY KEY CLUSTERED ( [id] ASC ) WITH ( pad_index = OFF,ignore_dup_key = OFF ) ON [primary])
ON [primary]
END
ELSE
BEGIN
TRUNCATE TABLE fk
END

GO

--- start processing FKs and store in table fk
DECLARE @tableName NVARCHAR(255);

DECLARE tables CURSOR FOR
SELECT [name]
FROM sys.tables
ORDER BY [name]

OPEN tables;

FETCH NEXT FROM tables
INTO @tableName

WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO fk
(stable,
scolumn,
rtable,
rcolumn)
SELECT @tableName AS stable,
t1.name AS scolumn,
t2.rtablename AS rtable,
t2.name AS rcolumn
FROM (SELECT col.name,
f.constid AS t
FROM syscolumns col,
sysforeignkeys f
WHERE f.fkeyid = col.id
AND f.fkey = col.colid
AND f.constid IN (SELECT DISTINCT (id)
FROM sysobjects
WHERE Object_name(parent_obj) = @tableName
AND xtype = 'F')) AS t1,
(SELECT Object_name(f.rkeyid) AS rtablename,
col.name,
f.constid AS t
FROM syscolumns col,
sysforeignkeys f
WHERE f.rkeyid = col.id
AND f.rkey = col.colid
AND f.constid IN (SELECT DISTINCT (id)
FROM sysobjects
WHERE Object_name(parent_obj) = @tableName
AND xtype = 'F')) AS t2
WHERE t1.t = t2.t

FETCH NEXT FROM tables
INTO @tableName
END

CLOSE tables

DEALLOCATE tables

GO

SELECT *
FROM fk
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值