【发布时间】:2009-06-01 14:09:41
【问题描述】:
我的数据主要用于数据库的一个表中,并在几个不同的表中引用。我需要更正数据。是否可以编写一个“where-used”语句来搜索数据库中的每个表并返回所有引用数据的表?
我正在使用 SQL 2005。
谢谢。
【问题讨论】:
标签: sql sql-server-2005
我的数据主要用于数据库的一个表中,并在几个不同的表中引用。我需要更正数据。是否可以编写一个“where-used”语句来搜索数据库中的每个表并返回所有引用数据的表?
我正在使用 SQL 2005。
谢谢。
【问题讨论】:
标签: sql sql-server-2005
我找到了这条sql语句here:
SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint,
SCHEMA_NAME(schema_id) AS SchemaName,
OBJECT_NAME(parent_object_id) AS TableName,
type_desc AS ConstraintType
FROM sys.objects
WHERE type_desc LIKE '%CONSTRAINT'
AND OBJECT_NAME(OBJECT_ID) LIKE 'FK_%'
注意:- 我将所有外键约束命名为以 FK_ 开头,以便过滤它们。
【讨论】:
尝试将图表添加到数据库中,然后将所有表格放到其中。如果我正确解释了您的问题,您是在尝试理解已经存在的数据库模式吗?如果您使用图表,它将为您绘制参考资料,这将使您能够查看数据在表结构中的链接位置。
对于 SQL,您可以使用连接,或者使用 where 条件来链接来自不同表的数据。
你想“纠正”什么?
【讨论】:
在 Management Studio 中,您可以右键单击表/视图/存储过程并选择查看依赖项。在依赖项窗口中,您可以选择查看选定项所依赖的对象或查看依赖于选定项的项。
【讨论】:
事后您不能这样做,但在表设计时您可以设置与“ON UPDATE CASCADE”的关系。
【讨论】:
如果数据库中存在物理上的外键,您可以对数据库进行反向工程(请参阅this posting 了解执行此操作的脚本)。如果不是这种情况,那么您可以进行一些手动侦探工作。
Visio 专业版有一个用于对数据库进行逆向工程的工具。 2003 不能很好地与 SQL Server 2005 配合使用,因此您需要:
Visio 2007
修改上面链接的脚本,使其不会生成架构引用并将脚本加载到 SQL Server 2000 数据库中。然后,从 SQL 2000 数据库进行逆向工程。
如果您没有外键或外键覆盖范围不完整,您可以手动查找它们(例如,查找具有相似外观代码的字段以引用数据)并手动注释图表中的键。不要尝试使用 SSMS 中的图表工具来执行此操作,因为它可能会尝试将 FK 填充回数据库中。
【讨论】: