日期:2014-05-17  浏览次数:20891 次

如何使用存储过程返回值
第一步:创建一个可以返回值 的存储过程 
create  proc [brpbomson] @cinvcode varchar(50)
as
declare @dec3 decimal(18,4)
set @dec3=0
return @dec3

第二步:使用存储过程 返回值 
UPDATE Ainventory
SET Ainventory.Dec3=exec brpbomson @cinvcode=Ainventory.cinvcode
FROM Cbom LEFT JOIN Ainventory ON Cbom.cinvcode=Ainventory.cinvcode

结果运行报错了,报错如下:

消息 156,级别 15,状态 1,第 2 行
在关键字 'exec' 附近有语法错误。
消息 170,级别 15,状态 1,第 2 行
第 2 行: '.' 附近有语法错误。

我第二步应该如何 修正语法错误 呢

------解决方案--------------------
用函数,不是用存储过程
create  function [brpbomson] (@cinvcode varchar(50))
returns decimal(18,4)
 as
begin
 declare @dec3 decimal(18,4)
 set @dec3=0
 return @dec3
end
 

UPDATE Ainventory
 SET Ainventory.Dec3=dbo.brpbomson(Ainventory.cinvcode) 
 FROM Cbom LEFT JOIN Ainventory ON Cbom.cinvcode=Ainventory.cinvcode

------解决方案--------------------
create  proc [brpbomson] 
@cinvcode varchar(50),@dec3 decimal(18,4) OUTPUT
AS
set @dec3=0
return @dec3
--调用
declare @var1 varchar(50),@var2 decimal(18,4)
set @var1='aa'
exec [brpbomson] @var1,@var2 OUTPUT
print @var2

------解决方案--------------------
一般存储过程返回值都是用来判断存储过程运行是否出错。像要输出结果(多个)的话还是用output比较好。
------解决方案--------------------
用游标吧,一条一条更新,定义变量将存储过程的返回值保存下来,再对数据进行更新操作