2

我的存储过程定义为

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'.
4

4 回答 4

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'

替代方案 - 不要命名参数 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形式用于任何参数,则它必须用于所有后续参数。

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

于 2013-07-25T06:03:27.827 回答
3

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

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
于 2013-07-25T06:48:53.963 回答
2

改变这个会起作用

    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'
于 2013-07-25T07:00:46.267 回答
0

这是您问题的工作代码。

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

程序

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'
于 2014-01-13T08:18:13.997 回答