如果表设计更改,则确定存储过程中的错误

时间:2015-08-17 17:51:22

标签: sql-server stored-procedures

这是一个更假设的问题,但假设有人在SQL Server中更改了一个表格,这会破坏存储过程 - 或者存储大量存储过程,是否有办法确定哪些内容已被破坏?

假设我有一个返回一些用户数据的存储过程

SELECT user.Id,
       user.FirstName,
       user.LastName
FROM Users

然后,开发人员对表进行更改,并将LastName列名更改为Surname。但他忘了改变相关的存储过程。

我可以使用SQL Server查看存储过程的依赖关系,但我想知道哪些存储过程只是坏了。

或者在我的情况下,如果我有存储过程引用第三方表并且第三方完全修改了它们的表。

有没有办法检查?

2 个答案:

答案 0 :(得分:1)

您还可以在视图,函数以及版本14及更高版本的存储过程中使用架构绑定。这将是一种主动方法,可以防止开发人员进行会破坏视图,功能或过程的更改。

否则你将不得不使用脚本来检查。我认为这个问题有一些可以帮到你的信息: Syntax check all stored procedures?

答案 1 :(得分:1)

对于程序,您可以使用此光标:

Declare list_cursor Cursor 
For
Select code = 'sp_refreshsqlmodule '''+OBJECT_SCHEMA_NAME(object_id)+'.'+OBJECT_NAME(object_id)+'''' From sys.procedures
Declare @sql nvarchar(max)

Open list_cursor
FETCH NEXT FROM list_cursor INTO @sql

While @@FETCH_STATUS = 0
Begin
    Begin Try
        Exec sp_executesql @sql
    End Try
    Begin Catch
        print @sql
        print '   '+ERROR_MESSAGE()
    End Catch
    FETCH NEXT FROM list_cursor INTO @sql
END

CLOSE list_cursor
DEALLOCATE list_cursor