SQL Server脚本按层次结构/依赖关系从上到下遍历所有表

时间:2015-03-27 18:57:33

标签: sql sql-server hierarchy

我一直在尝试抓取/遍历我们必须填充表的顺序的SQL Server数据库,到目前为止,我能够使用sp_msdependencies查看代码并将其用于此目的,你可以看到下面的实际代码。

DECLARE @ProductTotals TABLE
(
  oType int, 
  oObjName varchar(255),
  oOwner varchar(50),
  oSequence int
);

insert into @ProductTotals 
   EXEC sp_msdependencies @intrans = 1 ;

select 
   t.object_id as TableId
   , ist.Table_Name as TableName
   , ist.Table_Catalog as TableCatalog
   , ist.Table_Schema as TableSchema
   , pt.oSequence as [Level]
   , isnull(IDENT_CURRENT(ist.Table_Name),0) as PrimaryKeyLastValue
     , ColumnCount.NumberOfColumns as NumberOfColumns
from 
   @ProductTotals as pt
inner join 
   sys.tables as t on t.name = pt.oObjName
                   and t.is_filetable = 0
inner join 
   information_schema.tables as ist on ist.table_name = t.name
inner join
   (select 
       count(column_Name) as NumberOfColumns, Table_name
    from 
       INFORMATION_SCHEMA.columns
    group by 
       Table_name) as ColumnCount on ColumnCount.TABLE_Name = t.name
where 
    oType = 8

现在,当我针对我们的prod数据库的备份文件运行它时,并按照表的顺序我得到一个错误,因为,似乎一些表在同一级别由外键连接。

现在,我的假设是,LEVEL意味着该级别的所有表,无论您如何填充它,都不会有关于FK依赖性的问题并且彼此独立,但我错了。这些表也不是自引用的。

我看到其他使用CTE遍历表的代码SQL代码,但我收到此错误

  

声明终止。最大递归100已经用尽   在声明完成之前。

我想这意味着我因为自引用表而耗尽了max循环。

我不是真正的数据库用户,所以我想请求帮助,如果有人有一个SQL Server 2012脚本遍历所有表并创建一个优先顺序如何填充表我可以只是ORDER BY并将数据插入?

过去几个小时已经拉了我的头发,所以任何帮助都会很棒。

感谢。

0 个答案:

没有答案