T-SQL如何查询SQL Server中指定表关联的所有视图及所属Schema
SQL Server查询指定表关联视图及Schema信息的正确方案
原使用的INFORMATION_SCHEMA.VIEW_TABLE_USAGE存在元数据更新不及时、未执行视图不会记录依赖关系的缺陷,无法覆盖新增视图、未调用视图的查询场景。
正确实现代码
SELECT vs.name AS VIEW_SCHEMA, v.name AS VIEW_NAME, ts.name AS TABLE_SCHEMA, t.name AS TABLE_NAME FROM sys.tables t INNER JOIN sys.schemas ts ON t.schema_id = ts.schema_id INNER JOIN sys.sql_expression_dependencies dep ON dep.referenced_id = t.object_id INNER JOIN sys.views v ON dep.referencing_id = v.object_id INNER JOIN sys.schemas vs ON v.schema_id = vs.schema_id WHERE -- 替换为目标表名 t.name = 'MYTABLE' -- 视图名过滤条件,不需要可直接删除 AND v.name LIKE '%_something%' ORDER BY VIEW_SCHEMA, VIEW_NAME
方案说明
- 依赖
sys.sql_expression_dependencies系统视图存储的对象依赖关系,只要视图定义中引用了目标表,无论视图是否被执行过都会保留依赖记录,不会出现查询为空的问题 - 返回字段完全匹配需求的
VIEW_SCHEMA、VIEW_NAME、TABLE_SCHEMA、TABLE_NAME四列结构 - 关联逻辑基于SQL Server系统表内置的object_id、schema_id关联键,查询结果稳定准确,不会出现匹配错误
- 支持SQL Server 2008及以上所有版本,无需额外权限,普通账号只要有系统视图查询权限即可执行
- 如果需要查询跨Schema的同名表,可以在WHERE条件中添加
ts.name = '目标表所属Schema名'做更精确的过滤
内容的提问来源于stack exchange,提问作者havmaage
相关产品推荐
相关产品推荐

