如何编写返回记录集的存储过程

iamtotem 2004-04-30 02:08:59
存储过程中,需要多次执行Select语句,但是要返回的是最后一次的查询结果。
谢谢
...全文
72 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongshandong 2004-09-17
  • 打赏
  • 举报
回复
iamtotem 2004-04-30
  • 打赏
  • 举报
回复
写成下面这样,还是不行:
CREATE PROCEDURE dbo.UP_IO
@itype int=1,
@gid int,
@qua int=1

AS
create table #t
(
errno int,
errdesc varchar(100)
)

if @itype!=1 and @itype!=-1
begin
insert into #t values(1,'类型值错误')
end
else
begin
if @qua<=0
begin
insert into #t values(2,'数量值小于等于0')
end
else
begin
select * from t_goods where [id]= @gid
if @@ROWCOUNT>0
begin
BEGIN TRANSACTION
insert into t_inout values(@itype,@gid,@qua)
select * from t_stock where gid= @gid
if @@ROWCOUNT>0
update t_stock set quantity=quantity+@itype*@qua where gid=@gid
else
insert into t_stock(gid,quantity)values(@gid,@itype*@qua)

COMMIT TRANSACTION
insert into #t values(0,'处理完成')
end
else
BEGIN
insert into #t values(3,'商品不存在')
END
end
end

select errno,errdesc from #t
drop table #t
GO
返回的不是最后的那个。
iamtotem 2004-04-30
  • 打赏
  • 举报
回复
CREATE PROCEDURE dbo.UP_IO
@itype tinyint=1,
@gid int,
@qua int=1

AS
if @itype!=1 and @itype!=-1
begin
select 1,"类型值错误" --只能是 1 或 -1
return
end

if @qua<=0
begin
select 2,"数量值小于等于0"
return
end

select * from t_goods where [id]= @gid
if @@ROWCOUNT>0
begin
BEGIN TRANSACTION
insert into t_inout values(@itype,@gid,@qua)
end
else
BEGIN
select 3,"商品不存在"
return
END

select * from t_stock where gid= @gid
if @@ROWCOUNT>0
update t_stock set quantity=quantity+@itype*@qua where gid=@gid
else
insert into t_stock(gid,quantity)values(@gid,@itype*@qua)

COMMIT TRANSACTION
select 0,"处理完成"
return
GO
---------------------
最后要求返回下列之一:
select 0,"处理完成"
...
select 3,"商品不存在"
LoveSQL 2004-04-30
  • 打赏
  • 举报
回复
前面多次的select语句可以是赋值语句,这样并不影响返回最后一次的查询结果。。

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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