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表单用于任何参数,则必须将其用于所有后续参数.
(因为,显然,第一种用法可能是定义任何参数,因此它不再假设应按顺序分配任何后续的参数)