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