日期:2014-05-18  浏览次数:20372 次

如何判断已打开的事务没有rollback或者commit,已打开的游标是否关闭。我下面这样写,如果第一次运行有错误发生,则第二次运行时总是提示游标已存在。
ALTER PROCEDURE [dbo].[WMS_TransVoucher_Check]
-- Add the parameters for the stored procedure here
@FlowNo varchar(50), --单据编号 
@CheckID varchar(50), --审核人ID
@CheckName varchar(50), --审核人姓名
@SystemID int --系统标识
AS
BEGIN
-- Insert statements for procedure here
BEGIN TRANSACTION

DECLARE @rtn INT
DECLARE @BusinessDate DATETIME
DECLARE @FlowNoIn VARCHAR(50)
DECLARE @FlowNoOut VARCHAR(50)
DECLARE @cWhCodeIn VARCHAR(50)
DECLARE @cWhNameIn VARCHAR(50)
DECLARE @CanUse VARCHAR(50)
DECLARE @cWhCodeOut VARCHAR(50)
DECLARE @cWhNameOut VARCHAR(50)
DECLARE @cInvCode VARCHAR(50)
DECLARE @cInvName VARCHAR(50)
DECLARE @Barcode VARCHAR(50)
DECLARE @cInvStd VARCHAR(50)
DECLARE @BatchNo VARCHAR(50)
DECLARE @PositionsInCode VARCHAR(50)
DECLARE @PositionsInName VARCHAR(50)
DECLARE @PositionsOutCode VARCHAR(50)
DECLARE @PositionsOutName VARCHAR(50)
DECLARE @cComUnitName VARCHAR(50)
DECLARE @cComQuantity FLOAT
DECLARE @cComUnitPrice MONEY
DECLARE @mComUnitName VARCHAR(50)
DECLARE @mComQuantity FLOAT
DECLARE @RETURNCODE INT
DECLARE @RETURNMSG VARCHAR(100)

SET @BusinessDate=GETDATE()

SELECT @cWhCodeIn=cWhCodeIn,
@cWhNameIn=cWhNameIn,
@cWhCodeOut=cWhCodeOut,
@cWhNameOut=cWhNameOut,
@CanUse=CanUse
FROM WMS_TransVoucher
WHERE FlowNo=@FlowNo AND ISNULL(CheckID,'')=''

IF(@@ROWCOUNT>0)
BEGIN
--增加一张调拨入库单
EXEC WMS_GetFormNo '其它入库',@BusinessDate,@FlowNoIn output

EXEC @rtn=dbo.WMS_StockRecord_Add 
@FlowNoIn,1,'103001','',@BusinessDate,@cWhCodeIn,@cWhNameIn,
'','','','','','','',@CheckID,@CheckName,@CanUse,'',@FlowNo,'','','',@SystemID,'由调拨单产生的入库单'
IF(@rtn<>1)
BEGIN
SET @RETURNCODE=-1
SET @RETURNMSG='生成其它入库单单头信息失败!'
GOTO ERROR
END

--增加一张调拨出库单
EXEC WMS_GetFormNo '其它出库',@BusinessDate,@FlowNoOut output

EXEC @rtn=dbo.WMS_StockRecord_Add 
@FlowNoOut,1,'203001','',@BusinessDate,@cWhCodeOut,@cWhNameOut,
'','','','','','','',@CheckID,@CheckName,@CanUse,'',@FlowNo,'','','',@SystemID,'由调拨单产生的出库单'
IF(@rtn<>1)
BEGIN
SET @RETURNCODE=-2
SET @RETURNMSG='生成其它出库单单头信息失败!'
GOTO ERROR
END

--增加调拨单明细
DECLARE CUR_TransVouchers CURSOR FOR
SELECT cInvCode,cInvName,Barcode,cInvStd,BatchNo,PositionsInCode,PositionsInName,
cComUnitName,cComQuantity,cComUnitPrice,mComUnitName,mComQuantity
FROM WMS_TransVouchers
WHERE FlowNo=@FlowNo
OPEN CUR_TransVouchers
FETCH NEXT FROM CUR_TransVouchers 
INTO @cInvCode,@cInvName,@Barcode,@cInvStd,@BatchNo,@PositionsInCode,@PositionsInName,
@cComUnitName,@cComQuantity,@cComUnitPrice,@mComUnitName,@mComQuantity
WHILE(@@FETCH_STATUS=0)
BEGIN
print @cInvCode+','+@cInvName
EXEC @rtn=dbo.WMS_StockRecords_Add 
@FlowNoIn,@cInvCode,@cInvName,@Barcode,@cInvStd,@BatchNo,'','',
@PositionsInCode,@PositionsInName,@cComUnitName,@cComQuantity,@cComUnitPrice,@mComUnitName,@mComQuantity,
@CheckID,@CheckName,'',@FlowNo,@CanUse,'由调拨单产生的入库单'
IF(@rtn<>1)
BEGIN
SET @RETURNCODE=-3
SET @RETURNMSG='生成其它入库单明细信息失败!'
GOTO ERROR
END

EXEC @rtn=dbo.WMS_StockRecords_Add 
@FlowNoOut,@cInvCode,@cInvName,@Barcode,@cInvStd,@BatchNo,'','',
@PositionsOutCode,@PositionsOutName,@