2017-05-08 610 views
1

我有一个包含数据的Sql数据库。我被要求使用所有必需的主数据填充新的相同数据库,以便应用程序能够启动并为新客户运行。在sql数据库中查找表之间的依赖关系

First approach

从数据库中删除所有数据,运行应用程序,相信我不会甚至能够登录。观察错误,确定需要主数据的表格(至少确定User表格),插入数据。然后假设我要访问一个模块。但没有一些主数据,它会给我错误。观察错误,确定需要主数据的表格,插入数据。 但这似乎不实际。

Second approach

在保持数据库中的数据,采取一代表的时间,使用查询或SQL Server Management Studio中的工具,找到所有相关的表。保留父表数据并删除子表数据。对所有表格执行此操作。在第二轮考虑其余的父表。某些表格的数据是从应用程序插入的。识别并删除它们。这样我可以在最后得到相关的主数据。但我不知道如何解决这个问题。

这些都是我的想法。当然,可能有更多的方法比这些更精确,更容易。我对做什么感到困惑。请指导我。谢谢!

+0

我希望它能帮助,http://stackoverflow.com/questions/3829271/how-can-i-clone-an-sql-server-database-on-the-same-server-in-sql-server- 2008-EXP –

+0

并以'sp_depends'用于获取相关性:https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-depends-transact-sql –

回答

0

这里有几个疑问,你可以用它来找出哪些表和列所引用的表和列...

select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
select * from INFORMATION_SCHEMA.columns 
select * from INFORMATION_SCHEMA.tables 
select * from sys.foreign_keys 
select * from sys.foreign_key_columns 
select * from [sys].[objects] where [name] = 'your_tablename' 

更多,开放的对象资源管理器(视图菜单),展开:

数据库/系统数据库/主/视图/系统视图。

此外,检查出任何数据库图表有可能是在对象资源管理器:

数据库/ Your_db_name /数据库图表。

0

数据库有多大?

无论你有什么需要做适当的文档,那么最好从文档开始。 如果它是主表,则必须逐个列出所有表以及标识。

记住差异。在删除或截断之间。

虽然以上查询将会派上用场。

保存查询和文档以备将来需要。

最重要的是,不应该有任何错误,即使任何表是空的。

0

要查找表之间的外键依赖条件,您可以使用

SELECT FKT.name 'Parent table', CHT.name 'Child table' FROM sys.foreign_keys FK 
JOIN sys.tables CHT ON FK.parent_object_id = CHT.object_id 
JOIN sys.tables FKT ON FK.referenced_object_id = FKT.object_id 

也有方法可以找到使用中的系统视图数据库视图依赖性。