如何得知表的依赖关系

我有一个名为Total的数据库,里面大约有40个表。我正在尝试将这些表移动到另一台服务器上,所以我已经准备好了所有的创建表脚本,但问题是所有的表都有外键,所以我想知道执行这些表的顺序。 有没有办法知道它们的顺序?
2个回答

你应该分两步来做: 首先创建表格:
create table Table1 (..., constraint pk_table1 primary key (...));
create table Table2 (..., constraint pk_table2 primary key (...));
..
create table TableN (..., constraint pk_tableN primary key (...));
然后添加外键约束:
alter table Table1 add constraint fk_table1_tablex 
    foreign key (...) 
    references TableX (...);
alter table Table2 add constraint fk_table2_tabley 
    foreign key (...) 
    references TableY (...);
...
这样就没有顺序依赖了。

我已经通过SSMS获得了创建脚本,如果我按照你告诉我的方法去做的话,那么我需要单独分离外键约束,但由于有很多表,我无法做到这一点。 - peter
彼得,你可以单独生成表格脚本和约束脚本。老实说,40个表并不算很多。 - datagod

以下是所有没有被外键引用的表格:
select name
from sys.tables
where type = 'u'
and object_id not in
(
  select referenced_object_id
  from sys.foreign_key_columns
)
这将为您提供一个未被引用的所有表格的列表。要获取一个被引用(应该首先创建)的表格列表,可以使用以下代码:
select name
from sys.tables
where type = 'u'
and object_id in
(
  select referenced_object_id
  from sys.foreign_key_columns
)
要获取没有任何外键约束(因此没有依赖关系)的表列表,请运行以下代码:
select name
from sys.tables
where type = 'u'
and object_id not in
(
  select parent_object_id
  from sys.foreign_key_columns
)