T-SQL存储过程,OUTPUT参数给出错误

use*_*079 2 sql t-sql stored-procedures

我的存储过程定义为

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
Run Code Online (Sandbox Code Playgroud)

我叫它用

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'
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

'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'.
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 14

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

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'
Run Code Online (Sandbox Code Playgroud)

替代方案 - 不要命名参数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'
Run Code Online (Sandbox Code Playgroud)

来自EXECUTE:

@ parameter_name = value表单一起使用时,参数名称和常量不必按照在模块中定义的顺序提供.但是,如果@ parameter_name = value表单用于任何参数,则必须将其用于所有后续参数.

(因为,显然,第一种用法可能是定义任何参数,因此它不再假设应按顺序分配任何后续的参数)

  • @NateJ - `@ really`? (2认同)