以DB w.r.t关系以编程方式获取所有表

时间:2011-10-13 13:51:02

标签: sql sql-server-2008

我正在使用关系表。在按钮上单击我必须检索我的数据库中的所有表,以便所有主表位于顶部。(即从前端生成脚本)并将它们保存到文本文件中。

Back Ground目的:我需要为顺序中的所有表生成脚本,并在执行生成的脚本时不会发生外键约束错误。所以我需要按关系顺序获取表。

如何以这种方式检索表格?

1 个答案:

答案 0 :(得分:3)

如果您使用SQL Server Management Studio:

右键单击[您的数据库] - >任务 - >生成脚本 - >下一步 - >下一步 - > [选择表格]下一步 - > ......一直到最后,

向导应该能够创建一个首先创建依赖对象的智能脚本。

EDITED(2011年10月18日):

如果从以下查询的输出生成脚本,则必须担心外键依赖性会给您带来问题:

;with tcte(tid, tname, lvl) 
as
(
select st.object_id, st.name, 0 
from sys.tables st left join sys.foreign_keys sfk on sfk.parent_object_id = st.object_id 
where sfk.name is null

union all

select st.object_id, st.name, 1 
from sys.tables st left join sys.foreign_keys sfk on sfk.parent_object_id = st.object_id 
where sfk.parent_object_id = sfk.referenced_object_id

union all

select st.object_id as tid, st.name, tcte.lvl + 1 
from sys.tables st inner join sys.foreign_keys sfk on sfk.parent_object_id = st.object_id 
inner join tcte on tcte.tid = sfk.referenced_object_id
where tcte.tid <> sfk.parent_object_id
)

select tname, max(lvl) lvl from tcte group by tname order by lvl