【发布时间】:2012-03-25 23:08:11
【问题描述】:
我必须在一个表中添加几列,并且我还需要将这些列添加到使用该表的所有视图中。
是否可以获得数据库中使用某个表的所有视图的列表?
【问题讨论】:
标签: sql sql-server views
我必须在一个表中添加几列,并且我还需要将这些列添加到使用该表的所有视图中。
是否可以获得数据库中使用某个表的所有视图的列表?
【问题讨论】:
标签: sql sql-server views
应该这样做:
SELECT *
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION like '%YourTableName%'
【讨论】:
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION like '%YourTableName.%' OR VIEW_DEFINITION like '%YourTableName]%' OR VIEW_DEFINITION like '%YourTableName %'
select 1 where 'e' like '%[YourTableName]%'。你应该做类似VIEW_DEFINITION like '%\[YourTableName\]%' ESCAPE '\'
要查找表依赖项,您可以使用 sys.sql_expression_dependencies 目录视图:
SELECT
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc =so1.type_desc
FROM sys.sql_expression_dependencies sed
INNER JOIN sys.views o ON sed.referencing_id = o.object_id
LEFT OUTER JOIN sys.views so1 ON sed.referenced_id =so1.object_id
WHERE referenced_entity_name = 'Person'
您还可以试用ApexSQL Search 一个免费的 SSMS 和 VS 插件,它还具有查看依赖项功能。查看依赖项功能能够可视化所有 SQL 数据库对象的关系,包括加密对象和系统对象之间的关系、SQL Server 2012 特定对象以及存储在使用透明数据加密 (TDE) 加密的数据库中的对象
免责声明:我作为支持工程师在 ApexSQL 工作
【讨论】:
Person 是什么意思?
如果您需要按名称查找数据库对象(例如表、列、触发器) - 请查看名为 SQL Search 的 FREE Red-Gate 工具 - 它会搜索您的整个任何类型字符串的数据库。
对于任何 DBA 或数据库开发人员来说,它都是必备工具 - 我是否已经提到它绝对免费可用于任何用途??
【讨论】:
我觉得这个效果更好:
SELECT type, *
FROM sys.objects
WHERE OBJECT_DEFINITION(object_id) LIKE '%' + @ObjectName + '%'
AND type IN ('V')
ORDER BY name
在INFORMATION_SCHEMA.VIEWS 中过滤VIEW_DEFINTION 给了我不少误报。
【讨论】:
选择你的表 -> 查看依赖项 -> 依赖的对象
【讨论】:
SELECT VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_NAME = 'Your Table'
【讨论】:
使用以下查询查找表名的已用视图或存储过程的最简单方法 -
exec dbo.dbsearch 'Your_Table_Name'
【讨论】: