以下 SQL 在 Sybase ASE 和 MS SQL Server 中编译没有问题:
go
create proc foo
@foo1 int
as
select @foo1
go
create proc bar
@bar1 int
as
exec foo @foo1=@bar1, @foo2=@bar1
go
它在 Sybase ASE 中运行没有问题,但在 MS SQL Server 中提示:
Msg 8144, Level 16, State 2, Procedure foo, Line 11
Procedure or function foo has too many arguments specified.
是否可以告诉 MS SQL Server 忽略此警告?如果没有,是否可以在编译使用过多参数调用其他过程的存储过程时告诉 MS SQL Server 中断?当我们只有在实际调用过程时才知道这些问题时,这是潜在的危险。
此代码应该可以在 Sybase ASE 和 MS SQL Server 中运行,到目前为止,我们一直在使用 Sybase 的宽松规则,因为我们现在正在添加对 MS SQL Server 的支持。
正如我在下面提到的,问题不在于可选参数。这是对存储过程的预测。我不介意通过仅调用具有正确数量的参数的存储过程或向存储过程添加虚拟参数来解决问题,我只是希望 MS SQL Server 在编译时而不是在运行时告诉我。由于MS SQL Server实际上会验证过程是否存在(如果不存在,它会发出警告,尽管我更喜欢它像Sybase ASE一样失败),为什么它不能同时检查其参数?
最佳答案
不,这是不可能的。
我建议您开始使用 SSDT(SQL Server Data Tools)对代码运行 SQL 编译检查。它是 Visual Studio 的一部分。
关于sql - 我可以告诉 MS SQL Server 忽略 Msg 8144(指定的参数太多)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27445249/