在QA中通过手动用户测试实现了代码错误,经过调查发现这是一个简单的错误。
CREATE PROCEDURE ProcedureA
@A INT
AS SELECT 1
GO
CREATE PROCEDURE ProcedureB
AS EXEC ProcedureA @B = 0
为什么MSBuild进程没有捕获这样的简单内容,有没有办法为这样的引用错误添加验证?特别是因为这会破坏我们的门禁登记构建验证过程。
此外,手动执行也不会抛出任何错误。
答案 0 :(得分:2)
这是因为SQL Server存储过程的Deferred Name Resolution and Compilation
属性。
如果它不是存储过程,函数,表或视图等,它将在编译时出错。
但SQL Server存储过程仅在创建时检查语法准确性,并且存储过程的定义按原样存储。
仅在运行时,在第一次执行对象时 检查过程引用,如果缺少任何内容,则该过程将引发错误。