我有一张excel表,上面列有列。我现在想知道excel表中的所有列是由sql中的视图使用的(在ssms中工作)。 excel中的数据只是列名列表。 它看起来像。
COLUMNNAMES
DimCurrencyId
Dimzoneid
.......
近1000个列名称。
现在我需要查看是否在sql视图中使用它们?
我有近500个观点 任何人都可以让我知道最简单的方法,以便我可以跳过大量的手工工作吗?
答案 0 :(得分:0)
可能有一种更优雅的方法可以做到这一点,但我要做的是使用Excel文件生成SQL语句列表,然后将它们复制并粘贴到SQL Server Management Studio中并执行整个列表。 / p>
假设您的列名称在单元格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
(最后一个查询将不会联合任何内容,如果您尝试执行,则会收到错误带有union
语句的SQL。
执行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"
答案 1 :(得分:0)
尝试:
SELECT TABLE_NAME as [View Name]
FROM INFORMATION_SCHEMA.VIEWS
WHERE VIEW_DEFINITION LIKE '%YourColumnName%'