解析数据库中的所有存储过程

时间:2010-09-18 18:08:21

标签: sql-server parsing stored-procedures

有没有人知道如何验证数据库中所有存储过程中查询的正确性? 我正在考虑如果您修改代码文件中的某些内容,只需执行重建就会向您显示编译错误,指出您需要修复的地方。在数据库场景中,假设您修改表并删除存储过程中使用的列,在第一次运行该过程之前,您将不会了解此问题。

3 个答案:

答案 0 :(得分:4)

您所描述的是单元测试的用途。存储过程和函数通常需要设置参数,如果存储过程或函数封装了动态SQL,则有可能错过[corner] case。

另外,你提到的只是检查基本错误 - 没有关于验证返回数据的信息。例如 - 我可以更改数字列的精度...

这也进入了针对即时问题应该进行的基本测试,以及回归测试以确保没有不可预见的问题。

答案 1 :(得分:1)

您可以使用SCHEMABINDING创建所有对象,这将阻止您更改任何基础表,而不会删除并重新创建基于它们构建的视图和过程。

根据您的开发过程,这可能非常麻烦。我提供它作为解决方案,因为如果你想确保数据库中所有程序的正确性,那就可以做到。

答案 2 :(得分:0)

我在MSDN(SQL Server 2012)上找到了这个例子。我想它可以在某些情况下使用:

USE AdventureWorks2012;
GO

SELECT p.name, r.* 
FROM sys.procedures AS p
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r;

来源:sys.dm_exec_describe_first_result_set_for_object