如何查找列名无效的所有视图

Mik*_*ike 6 sql-server

我正在尝试使用我在网上找到的代码刷新所有视图:

DECLARE @ViewName VARCHAR(256)
DECLARE cViews CURSOR READ_ONLY FOR SELECT name from sys.views
OPEN cViews
FETCH NEXT FROM cViews INTO @ViewName
WHILE @@FETCH_STATUS != -1
BEGIN
    EXEC SP_REFRESHVIEW @ViewName
    PRINT 'View ''' + @ViewName + ''' has been refreshed.'
    FETCH NEXT FROM cViews INTO @ViewName
END
CLOSE cViews
DEALLOCATE cViews
Run Code Online (Sandbox Code Playgroud)

我收到错误Error Message: Invalid column name 'CloseDate'.,但它没有告诉我哪个视图有错误。我如何找到具有无效列名称的无效列名称的所有视图的名称?谢谢你。

Mar*_*ith 4

您可以尝试将数据库导入 SSDT 数据库项目并构建该项目。它应该报告此类事情。

或者你可以尝试

SELECT *
FROM   sys.views
       CROSS APPLY sys.dm_sql_referenced_entities (
                                        CONCAT(QUOTENAME(SCHEMA_NAME(SCHEMA_ID)), '.', QUOTENAME(NAME)), 
                                        'OBJECT') 
Run Code Online (Sandbox Code Playgroud)

然后仔细阅读错误输出

在此输入图像描述