【问题标题】:T-SQL Stored procedure with OUTPUT parameter giving an error带有 OUTPUT 参数的 T-SQL 存储过程给出错误
【发布时间】:2013-07-25 05:53:56
【问题描述】:

我的存储过程定义为

create procedure p1
(
    @id INT,
    @name varchar(20) OUTPUT,
    @company varchar(20) OUTPUT
)
AS
     BEGIN
        select @name = name, @company = company from table1 where id = @id;
     END
GO

我用它来称呼它

DECLARE @name varchar(20), @company varchar(20), @id INT;
exec dbo.p1 @id=2, @name OUTPUT, @company OUTPUT;
select @name AS 'NAME', @company AS 'COMPANY'

但是我得到一个错误

'Must pass parameter number 2 and subsequent parameters as '@name = value'. After the form '@name = value' has been used, all subsequent parameters must be passed in the form '@name = value'.

【问题讨论】:

    标签: sql tsql stored-procedures


    【解决方案1】:

    按照错误消息中的说明进行操作:

    DECLARE @name varchar(20), @company varchar(20), @id INT;
    exec dbo.p1 @id=2, @name = @name OUTPUT, @company = @company OUTPUT;
    select @name AS 'NAME', @company AS 'COMPANY'
    

    替代方案 - 不要命名参数 1:

    DECLARE @name varchar(20), @company varchar(20), @id INT;
    exec dbo.p1 2, @name OUTPUT, @company OUTPUT;
    select @name AS 'NAME', @company AS 'COMPANY'
    

    来自EXECUTE

    当与 @parameter_name=value 形式一起使用时,参数名称和常量不必按照它们在模块中定义的顺序提供。但是,如果 @parameter_name=value 形式用于任何参数,则它必须用于所有后续参数。

    (因为很明显,第一个用法可能是定义任何参数,所以它不能再假设任何后续的都应该按顺序分配)

    【讨论】:

    • 这应该被标记为答案。为了避免混淆,我还要补充一点,在“调用者”代码中,您应该以不同于参数的方式命名变量。像这样:“exec dbo.p1 id=2, name = outName, company = outCompany”。 PS:请原谅愚蠢的替换,我不记得 cmets 不能包含代码或 >1 at-symbols。
    • 好的,我阅读了帮助...exec dbo.p1 @id=2, @name=@outName, @company=@outCompany感谢您的推动!
    【解决方案2】:

    兄弟,我不确定您要选择什么,但也许您可以尝试以下查询:

    CREATE PROCEDURE p1
    (
    @id INT,
    @name varchar(20) OUTPUT,
    @company varchar(20) OUTPUT
    )
    AS
     BEGIN
    Set @name = 'name'
    Set @company = 'company'
        select @name , @company from table1 where id = @id;
     END
    GO
    

    【讨论】:

      【解决方案3】:

      改成这个就行了

          DECLARE @name varchar(20), @company varchar(20), @id INT;
          select @id=2
          exec dbo.p1 @id, @name OUTPUT, @company OUTPUT;
          select @name AS 'NAME', @company AS 'COMPANY'
      

      【讨论】:

        【解决方案4】:

        这是您问题的有效代码。

        请以这种方式尝试。它会正常工作的。

        程序

        alter procedure my_pro
        @id int,
        @name varchar(30) output,
        @email varchar(50) output
        as
        begin
        select @name=Name,@email=EmailID from Users where id=@id
        end
        

        执行

        declare @Newname varchar(40)
        declare @Newemail varchar(40)
        exec my_pro 2,@Newname output, @Newemail output
        select @Newname 'Name', @Newemail 'Email'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-26
          • 1970-01-01
          • 2020-07-02
          • 1970-01-01
          • 2020-02-29
          相关资源
          最近更新 更多