sql - 如何检查sql server中的所有存储过程是否正常?

标签 sql sql-server dependencies metadata

如果我删除表或字段,如何检查 sql server 中的所有存储过程是否正常?

最佳答案

我发现凯德的答案对于制定我自己的脚本来检查数据库中的对象很有用,所以我想我也应该分享我的脚本:

DECLARE @Name nvarchar(1000);
DECLARE @Sql nvarchar(1000);
DECLARE @Result int;

DECLARE ObjectCursor CURSOR FAST_FORWARD FOR
SELECT QUOTENAME(SCHEMA_NAME(o.schema_id)) + '.' + QUOTENAME(OBJECT_NAME(o.object_id))
FROM sys.objects o
WHERE type_desc IN (
'SQL_STORED_PROCEDURE',
'SQL_TRIGGER',
'SQL_SCALAR_FUNCTION',
'SQL_TABLE_VALUED_FUNCTION',
'SQL_INLINE_TABLE_VALUED_FUNCTION',
'VIEW')
    --include the following if you have schema bound objects since they are not supported
    AND ISNULL(OBJECTPROPERTY(o.object_id, 'IsSchemaBound'), 0) = 0
;

OPEN ObjectCursor;

FETCH NEXT FROM ObjectCursor INTO @Name;

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @Sql = N'EXEC sp_refreshsqlmodule ''' + @Name + '''';
    --PRINT @Sql;

    BEGIN TRY
        EXEC @Result = sp_executesql @Sql;
        IF @Result <> 0 RAISERROR('Failed', 16, 1);
    END TRY
    BEGIN CATCH
        PRINT 'The module ''' + @Name + ''' does not compile.';
        IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
    END CATCH

    FETCH NEXT FROM ObjectCursor INTO @Name;
END

CLOSE ObjectCursor;
DEALLOCATE ObjectCursor;

关于sql - 如何检查sql server中的所有存储过程是否正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3027399/

相关文章:

mysql - SQL聚合记录的运行计数

sql-server - 创建一个存储过程来聚合行

Android Gradle 库依赖

javascript - 需要 JS,只定义一次依赖

sql - 选择所有元素都满足条件的组

SQL Server CE 日期存储在字符串 : how to compare 中

java - 如何在 java 中映射 TYPE TABLE OF VARCHAR2(5)?

sql - 如何连接每个组的某一列中的所有字符串

mysql - SQL Server/MySQL/Access - 以低效的方式加速插入多行

scala - 构建 Scala 包依赖图