SET NOCOUNT ON DECLARE @base_table_id integer, @base_table_name varchar(250), @FK_Id int,@FKName varchar(250),@FK_tab_Name varchar(250), @FK_Col_Name varchar(250),@Ref_tab_name varchar(250),@Ref_col_name varchar(250),@message varchar(4000) --PRINT "-------- FK Relations --------" --truncate table fk_all begin --if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fk_all]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[fk_all] --GO CREATE TABLE [dbo].[fk_all] ( [FK_Id] [numeric](18, 0) NULL , [FKName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [FK_tab_Name] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [Ref_tab_name] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [FK_Col_Name] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [Ref_col_name] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY] end DECLARE c1 CURSOR FOR select distinct id,name from sysobjects where xtype='U' order by name OPEN c1 FETCH NEXT FROM c1 INTO @base_table_id, @base_table_name WHILE @@FETCH_STATUS = 0 BEGIN --PRINT " " --SELECT @message = "----- Base Table: " + -- @base_table_id + " " + @base_table_name -- PRINT @message -- Declare an inner cursor based -- on au_id from the outer cursor. DECLARE fk_cursor CURSOR FOR SELECT sysforeignkeys."constid" as FK_Id, sysobjects."name" as FKName, sysobjects_ft."name" as FK_tab_Name, -- sysobjects_ft."id", sysobjects_rt."name" as Ref_tab_name , syscolumns_1."name" as FK_Col_Name , syscolumns."name" as Ref_col_name FROM ((((dbo.sysforeignkeys sysforeignkeys INNER JOIN dbo.sysobjects sysobjects ON sysforeignkeys."constid" = sysobjects."id") INNER JOIN dbo.sysobjects sysobjects_ft ON sysforeignkeys."fkeyid" = sysobjects_ft."id") INNER JOIN dbo.sysobjects sysobjects_rt ON sysforeignkeys."rkeyid" = sysobjects_rt."id") INNER JOIN dbo.syscolumns syscolumns_1 ON sysforeignkeys."fkeyid" = syscolumns_1."id" AND sysforeignkeys."fkey" = syscolumns_1."colid") INNER JOIN dbo.syscolumns syscolumns ON sysforeignkeys."rkeyid" = syscolumns."id" AND sysforeignkeys."rkey" = syscolumns."colid" where ( sysforeignkeys."fkeyid" =@base_table_id ) and sysforeignkeys."constid" not in (select fk_id from fk_all) group by sysforeignkeys."constid" , sysobjects."name", sysobjects_ft."name" , -- sysobjects_ft."id", sysobjects_rt."name" , syscolumns_1."name" , syscolumns."name" --ORDER BY sysobjects_ft."id" ASC --print @base_table_id --print @FKName OPEN fk_cursor FETCH NEXT FROM fk_cursor INTO @FK_Id ,@FKName ,@FK_tab_Name ,@Ref_tab_name,@FK_Col_Name ,@Ref_col_name -- IF @@FETCH_STATUS <> 0 WHILE @@FETCH_STATUS = 0 BEGIN -- SELECT @message = rtrim(ltrim(@FKName)) + rtrim(ltrim(@FK_tab_Name)) --+" " + rtrim(ltrim(@Ref_tab_name)) +" " + rtrim(ltrim(@FK_Col_Name))+" " + rtrim(ltrim(@Ref_col_name)) -- PRINT @message -- PRINT rtrim(ltrim(@base_table_name)) PRINT rtrim(ltrim(@FK_Id)) PRINT rtrim(ltrim(@FKName)) PRINT rtrim(ltrim(@FK_tab_Name)) PRINT rtrim(ltrim(@Ref_tab_name)) PRINT rtrim(ltrim(@FK_Col_Name)) PRINT rtrim(ltrim(@Ref_col_name)) --select * from fk_all insert into fk_all values (rtrim(ltrim(@FK_Id)),rtrim(ltrim(@FKName)),rtrim(ltrim(@FK_tab_Name)),rtrim(ltrim(@Ref_tab_name)),rtrim(ltrim(@FK_Col_Name)),rtrim(ltrim(@Ref_col_name))) FETCH NEXT FROM fk_cursor INTO @FK_Id ,@FKName ,@FK_tab_Name ,@Ref_tab_name,@FK_Col_Name ,@Ref_col_name END CLOSE fk_cursor DEALLOCATE fk_cursor FETCH NEXT FROM c1 INTO @base_table_id, @base_table_name END CLOSE c1 DEALLOCATE c1 select * from fk_all order by fk_tab_name