我一直在尝试抓取/遍历我们必须填充表的顺序的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
并将数据插入?
过去几个小时已经拉了我的头发,所以任何帮助都会很棒。
感谢。