执行存储过程的输入输出参数

Anod 2012-07-18 10:40:50

ALTER PROCEDURE [dbo].[PersonCount]
-- Add the parameters for the stored procedure here
@Personid int,
@Personidout int OUTPUT
-- <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT @Personidout = MAX(age)+1 from Person
SELECT Count(id)as Personid from Person where id=@Personid
-- Insert statements for procedure here
--SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END



--DECLARE @RC int
DECLARE @Personid INT
DECLARE @Personidout INT
-- TODO: 在此处设置参数值。

EXECUTE [AnodTestJoin].[dbo].[PersonCount]@Personid=2, @Personidout OUTPUT
Select 'person '+str(@Personidout)

执行时提示:
消息 119,级别 15,状态 1,第 6 行
必须传递参数 2,并以 '@name = value' 的形式传递后续的参数。一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递。


output修饰的参数怎么还需要以 '@name = value' 的形式传递????真不懂。。
...全文
264 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyifei123 2012-07-18
  • 打赏
  • 举报
回复
同样不懂。应该不用,可能是你那写错了吧。。
Anod 2012-07-18
  • 打赏
  • 举报
回复
EXECUTE [AnodTestJoin].[dbo].[PersonCount]@Personid=2, @Personidout = @Personidout OUTPUT

通过这句话才理解这里 @Personid=2,等于是把2赋值给@Personid,并把@Personid传入存储过程,即存储过程引用的是赋值表达式的左变量(同VC++、C#等),而 @Personidout = @Personidout OUTPUT还是一样,表明存储过程执行前@Personidout先执行一次自赋值,而执行后把输出值传出给@Personidout(赋值表达式的左变量),OUTPUT标识的还是左边的@Personidout。

真想给自己加的分啊。。。。。。。。。。
Anod 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
SQL code

--DECLARE @RC int
DECLARE @Personid INT
DECLARE @Personidout INT
-- TODO: 在此处设置参数值。

EXECUTE [AnodTestJoin].[dbo].[PersonCount]@Personid=2, @Personidout = @Personidout OUTPUT
Select……
[/Quote]

看吧 多简单 随便改个东西20分就到手了,
Anod 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
--DECLARE @RC int
DECLARE @Personid INT
DECLARE @Personidout INT
-- TODO: 在此处设置参数值。

EXECUTE [AnodTestJoin].[dbo].[PersonCount]2, @Personidout OUTPUT
Select 'person '+str(@Personidout)
[/Quote]

这个我知道 我就是想不按顺序输入参数。。。。
楠_ 2012-07-18
  • 打赏
  • 举报
回复
--DECLARE @RC int
DECLARE @Personid INT
DECLARE @Personidout INT
-- TODO: 在此处设置参数值。

EXECUTE [AnodTestJoin].[dbo].[PersonCount]2, @Personidout OUTPUT
Select 'person '+str(@Personidout)
AcHerat 元老 2012-07-18
  • 打赏
  • 举报
回复

--DECLARE @RC int
DECLARE @Personid INT
DECLARE @Personidout INT
-- TODO: 在此处设置参数值。

EXECUTE [AnodTestJoin].[dbo].[PersonCount]@Personid=2, @Personidout = @Personidout OUTPUT
Select 'person '+str(@Personidout)
Anod 2012-07-18
  • 打赏
  • 举报
回复
没有人??别的存储过程问题都有人回答 ,俺的简单的咋就木人呢
Anod 2012-07-18
  • 打赏
  • 举报
回复
没有人??别的存储过程问题都有人回答 ,俺的简单的咋就木人呢

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧