这是一个更假设的问题,但假设有人在SQL Server中更改了一个表格,这会破坏存储过程 - 或者存储大量存储过程,是否有办法确定哪些内容已被破坏?
假设我有一个返回一些用户数据的存储过程
SELECT user.Id,
user.FirstName,
user.LastName
FROM Users
然后,开发人员对表进行更改,并将LastName列名更改为Surname。但他忘了改变相关的存储过程。
我可以使用SQL Server查看存储过程的依赖关系,但我想知道哪些存储过程只是坏了。
或者在我的情况下,如果我有存储过程引用第三方表并且第三方完全修改了它们的表。
有没有办法检查?
答案 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