sql - 我可以告诉 MS SQL Server 忽略 Msg 8144(指定的参数太多)吗?

标签 sql sql-server sap-ase

以下 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/

相关文章:

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 如何在 postgres 中使用 'for statement' 触发器?

java - 找不到适用于 jdbc :sqlserver://repcode;DatabaseName=reporting 的合适驱动程序

sql - 如何插入表默认值

SQL扫描表更新值

sql - 更改数据库行的主键值

sql - 基于服务日期的 JOIN 表

sap-ase - 如何将存储过程中的数据获取到临时表中?

database - Sybase bcp 错误

mysql - 如何查询链接到 MySQL 中具有特定 ID 的另一行的行?