存储过程问题

咿呀大河马 2010-12-02 05:08:11
CREATE procedure p_unlock
@cPdno VARCHAR(20),
@cReturn varchar(100) OUTPUT
AS
SET NOCOUNT ON
if @cPdno=''
return


declare @cZgbm varchar(10),
@dtPdrq datetime,
@numRow numeric(10,0)


--判断盘点单是否存在
SELECT TOP 1 @cZgbm = zgbm, @dtPdrq=pdrq FROM PDDA_ZG WHERE PDNO=@cPdno
IF IsNull(@cZgbm,'')=''
begin
SET @cReturn='盘点单不存在'
return
end



SELECT TOP 1 @cZgbm =zgbm FROM PDDA_ZG WHERE pdrq>=@dtPdrq and zgbm=@cZgbm and flag='1' and pdno<>@cPdno

--IF IsNull(@cPdno,'')=''
if @@rowcount<>0
begin
SET @cReturn='在本次反审核的盘点单日期之后存在已审核的盘点单'
return
end

--开始反审核
begin tran
begin

update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B

if @@rowcount<>0
begin

SET @cReturn='盘点单反审核成功!' --这里虽然提示了,但是没走A,B这两条语句
ROLLBACK TRAN
return
end

if @@rowcount=0
begin
set @cReturn='盘点单已反审核过了!'

ROLLBACK TRAN
return
end

if @@error<>0
begin
SET @cReturn='反审核失败,意外错误'
ROLLBACK TRAN
return
end

end
--重新计算库存
execute p_jisuan_sales @cZgbm

commit tran


GO


大家帮忙看下 ! 那里不清楚我再补充

...全文
450 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshile 2010-12-03
  • 打赏
  • 举报
回复
原来盘点单都这么难啊?
abuying 2010-12-03
  • 打赏
  • 举报
回复
不要@@rowcount,@@error
因为它只返回上一条语句返回的行数
这里只是B返回的行数.
可以用一个变量去接收!
前面定义

declare @rowNum int ,@errorID int

Begin tran
Begin
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
set @rowNum=@@rowcount
set @errorID=@@error
--把下面所有@@rowcount,@@error替换成@rowNum,@errorID
end

If @@errorID = 0 or @@rowNum <> 0
Begin
SET @cReturn='盘点单反审核成功!' --这里虽然提示了,但是没走A,B这两条语句
return
end
咿呀大河马 2010-12-03
  • 打赏
  • 举报
回复
问题还是没有解决,没人关注了吗??
wisdom1 2010-12-02
  • 打赏
  • 举报
回复
学习了

可惜太乱 而且没有注释~·
otnto 2010-12-02
  • 打赏
  • 举报
回复

--感觉这里的问题
@@rowcount
--返回受上一语句影响的行数。
--用个变量去更新后的@@rowcount 存起来 再判断
咿呀大河马 2010-12-02
  • 打赏
  • 举报
回复
to 11楼

走了那2句update语句了,也提示‘盘点单反审核成功!’,但是比如说我执行

declare @result varchar(100)
exec p_unlock '9051-00015',@result output

print @result

2次,应该提示 ‘盘点单已反审核过了’,但是还是提示的‘盘点单反审核成功!’ ,如何修改呢?小弟愚昧啊
「已注销」 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zsh0809 的回复:]

update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
GO
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
GO
[/Quote]
13#写错了,主要是你后面就return了,没有执行到go,在每一个bengin end后加上go试试呢
「已注销」 2010-12-02
  • 打赏
  • 举报
回复
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
GO
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
GO
咿呀大河马 2010-12-02
  • 打赏
  • 举报
回复
to 10楼


有的,如果没有则提示 '盘点单不存在'
jayjiang0910 2010-12-02
  • 打赏
  • 举报
回复
LZ這樣試試:

CREATE procedure p_unlock
@cPdno VARCHAR(20),
@cReturn varchar(100) OUTPUT
AS


SET NOCOUNT ON
If @cPdno=''
return


declare @cZgbm varchar(10),
@dtPdrq datetime,
@numRow numeric(10,0)


--判断盘点单是否存在
SELECT TOP 1 @cZgbm = zgbm, @dtPdrq=pdrq FROM PDDA_ZG WHERE PDNO=@cPdno
IF IsNull(@cZgbm,'')=''
Begin
SET @cReturn='盘点单不存在'
return
End

SELECT TOP 1 @cZgbm =zgbm FROM PDDA_ZG WHERE pdrq>=@dtPdrq and zgbm=@cZgbm and flag='1' and pdno<>@cPdno

--IF IsNull(@cPdno,'')=''
If @@rowcount<>0
Begin
SET @cReturn='在本次反审核的盘点单日期之后存在已审核的盘点单'
return
End


--开始反审核
Begin tran
Begin
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
end

If @@error = 0 or @@rowcount <> 0
Begin
SET @cReturn='盘点单反审核成功!' --这里虽然提示了,但是没走A,B这两条语句
return
end

If @@error <> 0
Begin
set @cReturn='盘点单已反审核过了!'
goto Proc_Fail
End

If @@rowcount = 0
Begin
SET @cReturn='反审核失败,意外错误'
goto Proc_Fail
End


--重新计算库存
execute p_jisuan_sales @cZgbm

Commit tran

Proc_Fail:
ROLLBACK TRAN
GO

「已注销」 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 a78782295 的回复:]

引用 4 楼 luoyefeng1022 的回复:
你贴它出来要干嘛?哪里有问题?


虽然提示 “盘点单反审核成功”,
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZg……
[/Quote]
先查询这两句看看有没有条件符合的:
select * from pdda_zg
where pdno=@cPdno and flag='1' --A 补充上@cPdno 的值
咿呀大河马 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huminghua 的回复:]
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A在这后面输出一个东西
print 'A'
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
pr……
[/Quote]

发出去就成这了··我也很郁闷
7761098 2010-12-02
  • 打赏
  • 举报
回复
没仔细看完,不过1.将begin, end对齐,好像代码中不是很一致
2. 不要用@@rowcount判断,尤其跨界判断,最好用自定义的参数来判断
可以将两个update语句前面写多一个select赋值语句判断是否有update
huminghua 2010-12-02
  • 打赏
  • 举报
回复
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A在这后面输出一个东西
print 'A'
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
print 'B'
这样先测下呗!
begin tran
begin
这中间的Begin我是看到啦! end不知道你的在哪里结束。。这代码。。。。
咿呀大河马 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luoyefeng1022 的回复:]
你贴它出来要干嘛?哪里有问题?
[/Quote]

虽然提示 “盘点单反审核成功”,
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B

这2条语句没执行
luoyefeng1022 2010-12-02
  • 打赏
  • 举报
回复
你贴它出来要干嘛?哪里有问题?
咿呀大河马 2010-12-02
  • 打赏
  • 举报
回复
发帖还没玩转 ,很是悲剧!
咿呀大河马 2010-12-02
  • 打赏
  • 举报
回复
update pdda_zg set flag='0' where pdno=@cPdno and flag='1' --A
update jbzgk set pdrq=(select MAX(pdrq) from pdda_zg where zgbm=@cZgbm and flag='1' ) where item=@cZgbm --B
「已注销」 2010-12-02
  • 打赏
  • 举报
回复
' --这里虽然提示了,但是没走A,B这两条语句
========
A,B指的是哪两句?
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区中压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程中不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件中恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加中),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件中的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程中耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

34,837

社区成员

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

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