当前位置: 首页 > 知识库问答 >
问题:

我可以告诉MSSQL服务器忽略Msg 8144(指定太多参数)?

傅俊德
2023-03-14

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

它在赛贝斯ASE中运行没有问题,但在MSSQLServer抱怨:

Msg 8144, Level 16, State 2, Procedure foo, Line 11
Procedure or function foo has too many arguments specified.

是否可以告诉MSSQL服务器忽略此警告?如果没有,在编译调用具有太多参数的其他过程的存储过程时,是否可以告诉MSSQLServer中断?当我们只有在实际调用过程时才会了解这些问题时,这是潜在的危险。

这段代码应该在赛贝斯ASE和MSSQLServer中工作,到目前为止,我们一直在使用Sybase宽松规则的奢侈,因为我们现在正在添加对MSSQLServer的支持。

正如我在下面提到的,问题不是可选参数。它是关于存储过程的预测。我不介意通过只调用具有正确数量的参数的存储过程或向存储过程添加伪参数来解决这个问题,我只希望MS SQL Server在编译时告诉我,而不是在运行时。既然MS SQL Server实际上验证了一个过程是否存在(如果不存在,它会给出警告,尽管我更希望它像Sybase ASE一样失败),为什么它不能同时检查其参数?

共有2个答案

楚岳
2023-03-14

不,你不能这么做。如果它可以有一个或两个参数,那么使用具有默认值的可选参数:

create proc foobar
  @foo1 int = null,
  @bar1 int = null

您必须根据提供的参数处理代码执行路径。然后你可以这样做:

exec foobar -- with no params, both default to null

或者:

exec foobar 1 -- just a foo param, bar defaults to null

或者:

exec foobar 1,2 -- with both params

或者:

exec foobar @bar1 = 2 -- with a specified param, other param defaults to null
隆康平
2023-03-14

不,这是不可能的。

我建议您开始使用SSDT——SQL Server数据工具——对代码运行SQL编译检查。它是VisualStudio的一部分。

 类似资料:
  • 编辑以获得更多澄清:查询字符串是从另一个(get)请求中遗留下来的。因此,如果我可以清除查询字符串,这也将工作。此外,我不希望编辑表单输入的,因为我希望此postendpoint可以用于其他服务,而不必更改它们。

  • 问题内容: 我已经在Angular中设置了路由,并且一切正常: 但是,我现在有一个锚标记用作注销按钮,它将仅将用户重定向到/ User / Logout,然后注销将注销用户并将其重定向到登录页面。所以我想要的是让angular js忽略此特定路由,并允许它执行常规的HTTP重定向。这似乎很简单,但是我找不到解决问题的办法。 我知道我可以执行click事件并在click事件中进行window.loc

  • 几天来我一直在想办法解决这个问题。糟糕的是,hibernate没有提供ready to use annotation来将属性排除在脏检查之外。问题是,我有一节课,如下所示

  • 我正在开发一个Python库,我已经将它安装在本地virtualenv中进行测试。我在pip中安装了几个依赖项。当我这样做的时候 它添加了我当前的项目,如下所示: 我必须手动删除它-我的项目实际上并不依赖于它本身。是否可以向pip传递一个参数,该参数表示“嘿,忽略这些类型的包?”

  • 我有以下设置: 和neo4j-browser包括使用(目标是能够使用REST和web浏览器调试嵌入式数据库): 并开始使用: spring boot坚持尝试将Jetty作为servlet容器,即使主应用类有以下配置注释: 但是spring使用的jetty版本(8)不支持web套接字,所以我得到了 我如何告诉spring boot忽略Jetty并始终使用Tomcat? 依赖项树:

  • 忽略编译器警告 格式 #pragma clang push #pragma clang diagnostic ignored "错误类型" // 存在警告的代码 #pragma clang pop > 1.在需要忽略的警告处右键 -- Reveal in Log 2.会给出警告的详细信息,其中包括警告的类型 3.高亮选中的便是这个警告的类型 4.在警告代码处增加如下代码 Command