Find broken objects in SQL Server

前端 未结 11 524
孤独总比滥情好
孤独总比滥情好 2020-12-02 17:26

Is there a tool that will find all objects in SQL Server (functions, procs, views) that cannot possibly work because they refer to objects that don\'t exist?

11条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-02 18:05

    /*
    modified version of script from http://michaeljswart.com/2009/12/find-missing-sql-dependencies/
    Added columns for object types & generated refresh module command...
    filter out user-define types: http://stackoverflow.com/questions/2330521/find-broken-objects-in-sql-server
    

    */

    SELECT TOP (100) PERCENT
        QuoteName(OBJECT_SCHEMA_NAME(referencing_id)) + '.' + QuoteName(OBJECT_NAME(referencing_id)) AS [this Object...],
            o.type_desc,
        ISNULL(QuoteName(referenced_server_name) + '.', '')
        + ISNULL(QuoteName(referenced_database_name) + '.', '')
        + ISNULL(QuoteName(referenced_schema_name) + '.', '')
        + QuoteName(referenced_entity_name) AS [... depends ON this missing entity name]
        ,sed.referenced_class_desc
        ,case when o.type_desc in( 'SQL_STORED_PROCEDURE' ,'SQL_SCALAR_FUNCTION' ,'SQL_TRIGGER' ,'VIEW')
              then 'EXEC sys.sp_refreshsqlmodule ''' + QuoteName(OBJECT_SCHEMA_NAME(referencing_id)) + '.' + QuoteName(OBJECT_NAME(referencing_id)) + ''';'
              else null
           end as [Refresh SQL Module command]
    FROM sys.sql_expression_dependencies as sed
    LEFT JOIN sys.objects o
                ON sed.referencing_id=o.object_id
    WHERE (is_ambiguous = 0)
    AND (OBJECT_ID(ISNULL(QuoteName(referenced_server_name) + '.', '')
        + ISNULL(QuoteName(referenced_database_name) + '.', '')
        + ISNULL(QuoteName(referenced_schema_name) + '.', '')
        + QuoteName(referenced_entity_name)) IS NULL)
    AND NOT EXISTS
       (SELECT * 
        FROM sys.types 
        WHERE types.name = referenced_entity_name 
        AND types.schema_id = ISNULL(SCHEMA_ID(referenced_schema_name), SCHEMA_ID('dbo'))
       )
    ORDER BY [this Object...],
    [... depends ON this missing entity name]
    

提交回复
热议问题