SQL 中 Where 使用的语句

Posted

技术标签:

【中文标题】SQL 中 Where 使用的语句【英文标题】:Where Used Statements in SQL 【发布时间】:2009-06-01 14:09:41 【问题描述】:

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

我正在使用 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_ 开头,以便过滤它们。

【讨论】:

是否处理传递引用,其中: TableA 定义主键列 A1; TableB 有一个引用 A1 的外键列 B1,但在 (B1, B2) 上有一个复合主键;并且 TableC 在列 (C1, C2) 上有一个复合外键。通常,您不会在 TableC 上使用 C1 引用 A1 的显式外键约束,但如果您绘制图表,您会看到 C1 列中的所有值也必须是 A1 列中的值。这不是一个常见的问题;它可能已被避免 - 但这是一个真正的问题。【参考方案2】:

尝试将图表添加到数据库中,然后将所有表格放到其中。如果我正确解释了您的问题,您是在尝试理解已经存在的数据库模式吗?如果您使用图表,它将为您绘制参考资料,这将使您能够查看数据在表结构中的链接位置。

对于 SQL,您可以使用连接,或者使用 where 条件来链接来自不同表的数据。

你想“纠正”什么?

【讨论】:

我们在 defs 表中输入了两次描述符。我需要删除其中一个,但该 ID 已在多个不同的数据库中使用。我需要映射正确的 ID 并删除现有的重复项。【参考方案3】:

在 Management Studio 中,您可以右键单击表/视图/存储过程并选择查看依赖项。在依赖项窗口中,您可以选择查看选定项所依赖的对象或查看依赖于选定项的项。

【讨论】:

【参考方案4】:

事后您不能这样做,但在表设计时您可以设置与“ON UPDATE CASCADE”的关系。

【讨论】:

【参考方案5】:

如果数据库中存在物理上的外键,您可以对数据库进行反向工程(请参阅this posting 了解执行此操作的脚本)。如果不是这种情况,那么您可以进行一些手动侦探工作。

Visio 专业版有一个用于对数据库进行逆向工程的工具。 2003 不能很好地与 SQL Server 2005 配合使用,因此您需要:

Visio 2007

修改上面链接的脚本,使其不会生成架构引用并将脚本加载到 SQL Server 2000 数据库中。然后,从 SQL 2000 数据库进行逆向工程。

如果您没有外键或外键覆盖范围不完整,您可以手动查找它们(例如,查找具有相似外观代码的字段以引用数据)并手动注释图表中的键。不要尝试使用 SSMS 中的图表工具来执行此操作,因为它可能会尝试将 FK 填充回数据库中。

【讨论】:

以上是关于SQL 中 Where 使用的语句的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句中where多个数值条件的判断使用,或者其他可以实现的方式,高手来

sql语句中where后边的哪些条件会使索引失效 -- SQL语句优化

SQL 中 Where 使用的语句

SQL语句 select from where中可否嵌入if条件语句?

sql语句中“where1=1”是啥意思?

SQL 中 where 条件中 in 后面 加 CASE WHEN 语句 报错