【问题标题】:SQL parameter orderSQL 参数顺序
【发布时间】:2015-09-10 09:30:12
【问题描述】:

我正在调用 MS SQL SP,并且刚刚向 SP 添加了一个新参数。看起来像这样:

ALTER PROCEDURE yadayadaTable
(
    @Id int,
    @Date date,
    @Message nvarchar(255),
    @Output int OUTPUT,
    @fooValue int = 1
)

但是,这阻止了 SP 调用的工作。 sp参数的顺序是否重要?因此,

是需要放在最后的输出参数吗?

编辑:添加的参数是最后一个(fooValue),我在java中这样称呼它(不知道它是否对你有意义:))

ohOk = ohOk.set(mySqlConn.executeProcedure("dbo.yadayadaTable",
            "@Id:IN=pd;
            @Date:IN=pDate;
            @Message:IN=pNote;
            @Output:INOUT=pOutPut;
            @fooValue:IN=pfooValue",
            _internal_parameter_table,
            _internal_return_parameter_table,
            "proc1402661085026055"));

谢谢!

【问题讨论】:

  • 你怎么称呼它?这很关键
  • 哪个参数是新的(在此之后您的 SP 停止工作)?

标签: java sql-server stored-procedures


【解决方案1】:

这取决于你如何称呼它。

如果你从 T-SQL 调用存储过程,你可以:

DECLARE @output int
EXEC yadayadaTable 1, '2015-10-01', 'A Message', @output OUTPUT, 2
or
EXEC yadayadaTable 1, '2015-10-01', 'A Message', @output OUTPUT
or
EXEC yadayadaTable @Output=@output OUTPUT, @Date='2015-10-01', @Id=1, @Message='A Message'

请注意,如果不指定参数名称,则必须按照参数在存储过程中定义的顺序传递值。

如果在存储过程中定义了 OUTPUT 参数,则需要从调用方法中传入一个。

例如,如果您从 C# 中的服务器端代码调用它,则在创建命令对象以运行存储过程时,您将添加参数并指定它们的名称。 .net 框架将为您生成最后一个示例。

最佳实践,始终指定参数名称。这样一来,您对 SP 参数所做的更改就不太可能破坏使用它的现有代码。

更多帮助:

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多