如何编写脚本检测SQL视图依赖,避免因基表删除导致视图引用问题?

2026-04-27 21:280阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计797个文字,预计阅读时间需要4分钟。

如何编写脚本检测SQL视图依赖,避免因基表删除导致视图引用问题?

《关于图像引用的注意事项:

查哪些视图依赖已删除的基表

SQL Server 不会自动清理失效视图依赖,sys.dm_exec_describe_first_result_set 可快速筛出当前无法解析的视图定义。但更稳妥的是用 sys.sql_expression_dependencies 结合基表实际存在性做交叉验证:

  • 先查出所有引用了指定表名(比如 'Orders')的视图:SELECT referencing_id, referencing_entity_name FROM sys.sql_expression_dependencies WHERE referenced_entity_name = 'Orders' AND referenced_class = 1
  • 再对结果中的每个 referencing_id,检查它是否还指向真实对象:SELECT OBJECT_ID('dbo.v_order_summary') 返回 NULL 就说明该视图底层已断链
  • 注意:视图可能引用的是同义词、临时表或跨库三段名(如 OtherDB.dbo.Customers),这类需额外用 PARSENAME() 拆解并分别验证

MySQL 中视图失效的静默表现与检测盲区

MySQL 的视图在基表删除后仍能 SHOW CREATE VIEW 成功,但执行 SELECT * FROM v_orders 会直接报 Table 'db.Orders' doesn't exist

阅读全文

本文共计797个文字,预计阅读时间需要4分钟。

如何编写脚本检测SQL视图依赖,避免因基表删除导致视图引用问题?

《关于图像引用的注意事项:

查哪些视图依赖已删除的基表

SQL Server 不会自动清理失效视图依赖,sys.dm_exec_describe_first_result_set 可快速筛出当前无法解析的视图定义。但更稳妥的是用 sys.sql_expression_dependencies 结合基表实际存在性做交叉验证:

  • 先查出所有引用了指定表名(比如 'Orders')的视图:SELECT referencing_id, referencing_entity_name FROM sys.sql_expression_dependencies WHERE referenced_entity_name = 'Orders' AND referenced_class = 1
  • 再对结果中的每个 referencing_id,检查它是否还指向真实对象:SELECT OBJECT_ID('dbo.v_order_summary') 返回 NULL 就说明该视图底层已断链
  • 注意:视图可能引用的是同义词、临时表或跨库三段名(如 OtherDB.dbo.Customers),这类需额外用 PARSENAME() 拆解并分别验证

MySQL 中视图失效的静默表现与检测盲区

MySQL 的视图在基表删除后仍能 SHOW CREATE VIEW 成功,但执行 SELECT * FROM v_orders 会直接报 Table 'db.Orders' doesn't exist

阅读全文