可能有一种更优雅的方法来执行此操作,但我会使用 Excel 文件生成 SQL 语句列表,然后将它们复制并粘贴到 SQL Server Management Studio 并执行整个列表。
假设您的列名以单元格 A2 开头,我会将以下公式放入单元格 B2(或下一个可用列)中:
="select distinct sys.all_views.name from sys.all_views join sys.all_columns on sys.all_views.object_id = sys.all_columns.object_id where sys.all_columns.name = '"&A2&"' union"
或者,不需要加入(来自ElenaDBA's 答案):
="SELECT TABLE_NAME as [View Name] FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%"&A2&"%' UNION"
将公式拖到列列表的末尾。
将生成的 SQL 语句复制并粘贴到 SSMS 中,并确保在最后删除尾随 union(最后一个查询不会合并任何内容,如果您尝试执行 SQL,则会收到错误消息尾随 union 语句)。
执行 SQL,您应该会得到一个视图名称列表。 Union 自动消除重复。
同样,不优雅,但我相信这会完成工作。
更新
要显示视图名称和列名称,您只需在 A 列中添加对单元格的另一个引用即可获取您的列。此外,我们可以修改WHERE 子句,使其仅查看dbo 架构。
对于将变为(dbo 的schema_id 为 1)的第一个公式:
="select distinct sys.all_views.name, '"&A2&"' as 'colName' from sys.all_views join sys.all_columns on sys.all_views.object_id = sys.all_columns.object_id where sys.all_columns.name = '"&A2&"' and schema_id = 1 union"
基本上将您在 where 子句中搜索的值添加到选择部分。
第二个公式,使用相同的想法,看起来像这样(架构被名称引用):
="SELECT TABLE_NAME as [View Name] , '"&A2&"' as 'colName' FROM INFORMATION_SCHEMA.VIEWS WHERE VIEW_DEFINITION LIKE '%"&A2&"%' AND TABLE_SCHEMA = 'dbo' UNION"