2009-06-01 101 views
0

我的数据主要用于数据库中的一个表中,并在几个不同的表中引用。我需要更正这些数据。是否可以编写一个“where-used”语句来搜索数据库中的每个表并返回引用数据的所有表?SQL中使用的语句

我正在使用SQL 2005.

谢谢。

回答

1

我发现这条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_所以很容易对其进行过滤。

+0

这是否处理传递引用,其中:TableA定义主键列A1; TableB有一个引用A1的外键列B1,但在(B1,B2)上有一个复合主键;并且TableC在列(C1,C2)上具有复合外键。通常,对于使用C1引用A1的TableC,您不会有明确的外键约束,但是如果您绘制它,您将看到C1列中的所有值也必须是A1列中的值。这不是一个普遍的问题;它可能已被避免 - 但这是一个真正的问题。 – 2009-06-01 14:36:40

0

尝试向数据库中添加一个图表,并将所有表格放到它上面。如果我已经正确地解释了你的问题,你正试图理解一个已经存在的数据库模式?如果您使用该图表,它将绘制您的引用,这将允许您查看数据在表格结构中的链接位置。

至于SQL你可以使用连接,或条件来链接不同表中的数据。

你想“纠正”什么?

+0

我们描述符在defs表中输入两次。我需要消除其中的一个,但ID已被用于多个不同的数据库中。我需要映射正确的ID并删除现有的副本。 – 2009-06-01 14:44:09

0

在Management Studio中,您可以右键单击表格/视图/存储过程,然后选择查看偏移量。在依赖关系窗口中,您可以选择查看所选项目所依赖的对象,或者查看依赖于所选项目的项目。

0

事后你不能这样做,但在桌面设计时,你可以建立关系到“ON UPDATE CASCADE”。

0

如果数据库中存在实际存在的外键,则可以对数据库进行逆向工程(请参阅this posting)。如果情况并非如此,那么你需要做一些手工侦探工作。

Visio professional拥有反向工程数据库的工具。 2003不与SQL Server 2005中发挥很好,所以你需要或者:

  • Visio 2007年

  • 修改链接到上述所以它不会产生架构引用和脚本加载到脚本一个SQL Server 2000数据库。然后,从SQL 2000 DB反向工程。

如果没有外键或有不完整的外键的覆盖范围,你可以手动查找(例如,寻找与外观类似的代码字段引用数据)和手动标注在按键图。不要试图用SSMS中的图表工具来做到这一点,因为它可以尝试将FKs填充回数据库。