我正在使用关系表。在按钮上单击我必须检索我的数据库中的所有表,以便所有主表位于顶部。(即从前端生成脚本)并将它们保存到文本文件中。
Back Ground目的:我需要为顺序中的所有表生成脚本,并在执行生成的脚本时不会发生外键约束错误。所以我需要按关系顺序获取表。
如何以这种方式检索表格?
答案 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