如何检查视图是否正在使用列?

时间:2015-08-12 17:56:08

标签: sql sql-server excel shell powershell

我有一张excel表,上面列有列。我现在想知道excel表中的所有列是由sql中的视图使用的(在ssms中工作)。 excel中的数据只是列名列表。 它看起来像。

COLUMNNAMES

DimCurrencyId

Dimzoneid

.......

近1000个列名称。

现在我需要查看是否在sql视图中使用它们?

我有近500个观点 任何人都可以让我知道最简单的方法,以便我可以跳过大量的手工工作吗?

2 个答案:

答案 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%'