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