存储过程返回成功或失败信息

yuzhifu1 2017-08-17 01:56:57
写了一个存储过程,需要在成功后弹出一个提示,比方的fbillon字段,弹出内容为:XXX生产任务单生成成功,如果失败了,弹出失败原因,谢谢大家!
USE [AIS20131025233823]
GO
/****** Object: StoredProcedure [dbo].[yu123] Script Date: 2017/8/17 13:52:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--存储过程,由销售订单生成计划状态的生产任务单
--sp_helptext [yu123]
--drop proc [yu123]
--exec [yu123] 16404,1,'SEORD017062','2017-8-14 00:00:00.000','2017-8-18 00:00:00.000'
ALTER procedure [dbo].[yu123]
@FBillerID int, --制单人
@fentryid int, --分录号
@FBillNo varchar(11), --订单编号
@FPlanCommitDate datetime, --开工日期
@FPlanFinishDate datetime --完工日期
as
set nocount on
--begin transaction
begin
INSERT INTO [dbo].[ICMO]
([FBrNo]
,[FInterID]
,[FBillNo]
,[FTranType]
,[FStatus]
,[FMRP]
,[FType]
,[FWorkShop]
,[FItemID]
,[FQty]
,[FCommitQty]
,[FPlanCommitDate]
,[FPlanFinishDate]
,[FConveyerID]
,[FCommitDate]
,[FCheckerID]
,[FCheckDate]
,[FRequesterID]
,[FBillerID]
,[FSourceEntryID]
,[FClosed]
,[FNote]
,[FUnitID]
,[FAuxCommitQty]
,[FAuxQty]
,[FOrderInterID]
,[FPPOrderInterID]
,[FParentInterID]
,[FCancellation]
,[FSupplyID]
,[FQtyFinish]
,[FQtyScrap]
,[FQtyForItem]
,[FQtyLost]
,[FPlanIssueDate]
,[FRoutingID]
,[FStartDate]
,[FFinishDate]
,[FAuxQtyFinish]
,[FAuxQtyScrap]
,[FAuxQtyForItem]
,[FAuxQtyLost]
,[FMrpClosed]
,[FBomInterID]
,[FQtyPass]
,[FAuxQtyPass]
,[FQtyBack]
,[FAuxQtyBack]
,[FFinishTime]
,[FReadyTIme]
,[FPowerCutTime]
,[FFixTime]
,[FWaitItemTime]
,[FWaitToolTime]
,[FTaskID]
,[FWorkTypeID]
,[FCostObjID]
,[FStockQty]
,[FAuxStockQty]
,[FSuspend]
,[FProjectNO]
,[FProductionLineID]
,[FReleasedQty]
,[FReleasedAuxQty]
,[FUnScheduledQty]
,[FUnScheduledAuxQty]
,[FSubEntryID]
,[FScheduleID]
,[FPlanOrderInterID]
,[FProcessPrice]
,[FProcessFee]
,[FGMPBatchNo]
,[FGMPCollectRate]
,[FGMPItemBalance]
,[FGMPBulkQty]
,[FCustID]
,[FMultiCheckLevel1]
,[FMultiCheckLevel2]
,[FMultiCheckLevel3]
,[FMultiCheckLevel4]
,[FMultiCheckLevel5]
,[FMultiCheckLevel6]
,[FMultiCheckDate1]
,[FMultiCheckDate2]
,[FMultiCheckDate3]
,[FMultiCheckDate4]
,[FMultiCheckDate5]
,[FMultiCheckDate6]
,[FCurCheckLevel]
,[FMRPLockFlag]
,[FHandworkClose]
,[FConfirmerID]
,[FConfirmDate]
,[FInHighLimit]
,[FInHighLimitQty]
,[FAuxInHighLimitQty]
,[FInLowLimit]
,[FInLowLimitQty]
,[FAuxInLowLimitQty]
,[FChangeTimes]
,[FHeadSelfJ0172]
,[FHeadSelfJ0173]
,[FHeadSelfJ0174]
,[FCheckCommitQty]
,[FAuxCheckCommitQty]
,[FCloseDate]
,[FPlanConfirmed]
,[FPlanMode]
,[FMTONo]
,[FPrintCount]
,[FFinClosed]
,[FFinCloseer]
,[FFinClosedate]
,[FStockFlag]
,[FStartFlag]
,[FVchBillNo]
,[FVchInterID]
,[FCardClosed]
,[FHRReadyTime]
,[FPlanCategory]
,[FBomCategory]
,[FSourceTranType]
,[FSourceInterId]
,[FSourceBillNo]
,[FReprocessedAuxQty]
,[FReprocessedQty]
,[FSelDiscardStockInAuxQty]
,[FSelDiscardStockInQty]
,[FDiscardStockInAuxQty]
,[FDiscardStockInQty]
,[FSampleBreakAuxQty]
,[FSampleBreakQty]
,[FResourceID]
,[FAddInterID]
,[FAPSImported]
,[FAPSLastStatus]
,[FAuxPropID]
,[FOrderBOMEntryID])
select top 1
0,(select max(finterid)+1 from icmo),(SELECT FPreLetter+str(fcurno+1,6,0) fcurno FROM IcBillNo WHERE FBILLNAME='生产任务单'),85,0,1052,1054,d.F_101,t1.FItemID,t1.FQty-t1.FCommitQty,0,@FPlanCommitDate,@FPlanFinishDate,NULL,NULL,NULL,GETDATE(),NULL,@FBillerID,t1.FEntryID,0,t1.FNote,t1.FUnitID,0,t1.FQty-t1.FCommitQty,t.FInterID,0,0,0,0,0,0,0,0,NULL,0,NULL,NULL,0,0,0,0,0,b.FInterID,0,0,0,0,0,0,0,0,0,0,0,55,a.FItemID,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,t1.FQty-t1.FCommitQty,t1.FQty-t1.FCommitQty,0,t1.FQty-t1.FCommitQty,t1.FQty-t1.FCommitQty,0,'',t1.FEntrySelfS0153,t1.FEntrySelfS0154,0,0,NULL,1,14036,'',0,0,0,NULL,14215,0,'',0,1059,0,t.FPlanCategory,36820,81,t.FInterID,t.FBillNo,0,0,0,0,0,0,0,0,0,0,0,0,0,0
from seorder t join SEOrderEntry t1 on t.FInterID=t1.FInterID and t.FBillNo=@FBillNo and t1.fentryid=@fentryid
join cbCostObj a on a.FStdProductID=t1.FItemID
left join t_Item_3001 d on d.FItemID = t.FHeadSelfS0140
left join (select distinct FNumber,FInterID from vicbom where fusestatus='使用') b on a.FNumber=b.FNumber
order by t.FInterID

update IcBillNo set fcurno=fcurno+1 WHERE FBILLNAME='生产任务单'
end
--commit transaction
if (@@error<>0)
begin
--raiserror 99999 '组织数据出错'
rollback transaction
return (-1)
end
return (0)

...全文
885 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-08-17
  • 打赏
  • 举报
回复
吉普赛的歌 2017-08-17
  • 打赏
  • 举报
回复
USE [AIS20131025233823]
GO
/****** Object:  StoredProcedure [dbo].[yu123]    Script Date: 2017/8/17 13:52:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--存储过程,由销售订单生成计划状态的生产任务单
--sp_helptext [yu123]
--drop proc [yu123] 
--exec [yu123] 16404,1,'SEORD017062','2017-8-14 00:00:00.000','2017-8-18 00:00:00.000'
ALTER procedure [dbo].[yu123] 
 @FBillerID int,        --制单人
 @fentryid int,         --分录号
 @FBillNo varchar(11),   --订单编号
 @FPlanCommitDate datetime,  --开工日期
 @FPlanFinishDate datetime   --完工日期
AS
BEGIN
	
SET NOCOUNT ON
DECLARE @errMsg NVARCHAR(MAX)
SET @errMsg=''

BEGIN TRY
BEGIN TRAN
	INSERT INTO [dbo].[ICMO]
			   ([FBrNo]
			   ,[FInterID]
			   ,[FBillNo]
			   ,[FTranType]
			   ,[FStatus]
			   ,[FMRP]
			   ,[FType]
			   ,[FWorkShop]
			   ,[FItemID]
			   ,[FQty]
			   ,[FCommitQty]
			   ,[FPlanCommitDate]
			   ,[FPlanFinishDate]
			   ,[FConveyerID]
			   ,[FCommitDate]
			   ,[FCheckerID]
			   ,[FCheckDate]
			   ,[FRequesterID]
			   ,[FBillerID]
			   ,[FSourceEntryID]
			   ,[FClosed]
			   ,[FNote]
			   ,[FUnitID]
			   ,[FAuxCommitQty]
			   ,[FAuxQty]
			   ,[FOrderInterID]
			   ,[FPPOrderInterID]
			   ,[FParentInterID]
			   ,[FCancellation]
			   ,[FSupplyID]
			   ,[FQtyFinish]
			   ,[FQtyScrap]
			   ,[FQtyForItem]
			   ,[FQtyLost]
			   ,[FPlanIssueDate]
			   ,[FRoutingID]
			   ,[FStartDate]
			   ,[FFinishDate]
			   ,[FAuxQtyFinish]
			   ,[FAuxQtyScrap]
			   ,[FAuxQtyForItem]
			   ,[FAuxQtyLost]
			   ,[FMrpClosed]
			   ,[FBomInterID]
			   ,[FQtyPass]
			   ,[FAuxQtyPass]
			   ,[FQtyBack]
			   ,[FAuxQtyBack]
			   ,[FFinishTime]
			   ,[FReadyTIme]
			   ,[FPowerCutTime]
			   ,[FFixTime]
			   ,[FWaitItemTime]
			   ,[FWaitToolTime]
			   ,[FTaskID]
			   ,[FWorkTypeID]
			   ,[FCostObjID]
			   ,[FStockQty]
			   ,[FAuxStockQty]
			   ,[FSuspend]
			   ,[FProjectNO]
			   ,[FProductionLineID]
			   ,[FReleasedQty]
			   ,[FReleasedAuxQty]
			   ,[FUnScheduledQty]
			   ,[FUnScheduledAuxQty]
			   ,[FSubEntryID]
			   ,[FScheduleID]
			   ,[FPlanOrderInterID]
			   ,[FProcessPrice]
			   ,[FProcessFee]
			   ,[FGMPBatchNo]
			   ,[FGMPCollectRate]
			   ,[FGMPItemBalance]
			   ,[FGMPBulkQty]
			   ,[FCustID]
			   ,[FMultiCheckLevel1]
			   ,[FMultiCheckLevel2]
			   ,[FMultiCheckLevel3]
			   ,[FMultiCheckLevel4]
			   ,[FMultiCheckLevel5]
			   ,[FMultiCheckLevel6]
			   ,[FMultiCheckDate1]
			   ,[FMultiCheckDate2]
			   ,[FMultiCheckDate3]
			   ,[FMultiCheckDate4]
			   ,[FMultiCheckDate5]
			   ,[FMultiCheckDate6]
			   ,[FCurCheckLevel]
			   ,[FMRPLockFlag]
			   ,[FHandworkClose]
			   ,[FConfirmerID]
			   ,[FConfirmDate]
			   ,[FInHighLimit]
			   ,[FInHighLimitQty]
			   ,[FAuxInHighLimitQty]
			   ,[FInLowLimit]
			   ,[FInLowLimitQty]
			   ,[FAuxInLowLimitQty]
			   ,[FChangeTimes]
			   ,[FHeadSelfJ0172]
			   ,[FHeadSelfJ0173]
			   ,[FHeadSelfJ0174]
			   ,[FCheckCommitQty]
			   ,[FAuxCheckCommitQty]
			   ,[FCloseDate]
			   ,[FPlanConfirmed]
			   ,[FPlanMode]
			   ,[FMTONo]
			   ,[FPrintCount]
			   ,[FFinClosed]
			   ,[FFinCloseer]
			   ,[FFinClosedate]
			   ,[FStockFlag]
			   ,[FStartFlag]
			   ,[FVchBillNo]
			   ,[FVchInterID]
			   ,[FCardClosed]
			   ,[FHRReadyTime]
			   ,[FPlanCategory]
			   ,[FBomCategory]
			   ,[FSourceTranType]
			   ,[FSourceInterId]
			   ,[FSourceBillNo]
			   ,[FReprocessedAuxQty]
			   ,[FReprocessedQty]
			   ,[FSelDiscardStockInAuxQty]
			   ,[FSelDiscardStockInQty]
			   ,[FDiscardStockInAuxQty]
			   ,[FDiscardStockInQty]
			   ,[FSampleBreakAuxQty]
			   ,[FSampleBreakQty]
			   ,[FResourceID]
			   ,[FAddInterID]
			   ,[FAPSImported]
			   ,[FAPSLastStatus]
			   ,[FAuxPropID]
			   ,[FOrderBOMEntryID])
	select top 1 
	0,(select max(finterid)+1 from icmo),(SELECT FPreLetter+str(fcurno+1,6,0) fcurno FROM IcBillNo WHERE FBILLNAME='生产任务单'),85,0,1052,1054,d.F_101,t1.FItemID,t1.FQty-t1.FCommitQty,0,@FPlanCommitDate,@FPlanFinishDate,NULL,NULL,NULL,GETDATE(),NULL,@FBillerID,t1.FEntryID,0,t1.FNote,t1.FUnitID,0,t1.FQty-t1.FCommitQty,t.FInterID,0,0,0,0,0,0,0,0,NULL,0,NULL,NULL,0,0,0,0,0,b.FInterID,0,0,0,0,0,0,0,0,0,0,0,55,a.FItemID,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,0,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,NULL,NULL,0,t1.FQty-t1.FCommitQty,t1.FQty-t1.FCommitQty,0,t1.FQty-t1.FCommitQty,t1.FQty-t1.FCommitQty,0,'',t1.FEntrySelfS0153,t1.FEntrySelfS0154,0,0,NULL,1,14036,'',0,0,0,NULL,14215,0,'',0,1059,0,t.FPlanCategory,36820,81,t.FInterID,t.FBillNo,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	from seorder t join SEOrderEntry t1  on t.FInterID=t1.FInterID and t.FBillNo=@FBillNo and t1.fentryid=@fentryid 
	join cbCostObj a on a.FStdProductID=t1.FItemID
	left join t_Item_3001 d on d.FItemID = t.FHeadSelfS0140
	left join (select distinct FNumber,FInterID from vicbom where fusestatus='使用') b on a.FNumber=b.FNumber
	order by t.FInterID

	update IcBillNo set  fcurno=fcurno+1 WHERE FBILLNAME='生产任务单'
	COMMIT TRANSACTION
END TRY
BEGIN CATCH
	SET @errMsg=ERROR_MESSAGE()
	ROLLBACK TRAN
END CATCH

	--程序那边用 ExecuteSclar() 来接收,空串表示成功,否则即为失败
	SELECT @errMsg
END
GO
OwenZeng_DBA 2017-08-17
  • 打赏
  • 举报
回复
引用 8 楼 yuzhifu1 的回复:
不好意思,我太笨了,这个应用到我的存储过程上加在哪呢,有点搞不明白。
USE [AIS20131025233823]
GO
/****** Object:  StoredProcedure [dbo].[yu123]    Script Date: 2017/8/17 13:52:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--存储过程,由销售订单生成计划状态的生产任务单
--sp_helptext [yu123]
--drop proc [yu123] 
--exec [yu123] 16404,1,'SEORD017062','2017-8-14 00:00:00.000','2017-8-18 00:00:00.000'
ALTER PROCEDURE [dbo].[yu123]
    @FBillerID INT ,        --制单人
    @fentryid INT ,         --分录号
    @FBillNo VARCHAR(11) ,   --订单编号
    @FPlanCommitDate DATETIME ,  --开工日期
    @FPlanFinishDate DATETIME   --完工日期
AS 
    SET nocount ON
--begin transaction
    BEGIN
  
        BEGIN TRY	
            INSERT  INTO [dbo].[ICMO]
                    ( [FBrNo] ,
                      [FInterID] ,
                      [FBillNo] ,
                      [FTranType] ,
                      [FStatus] ,
                      [FMRP] ,
                      [FType] ,
                      [FWorkShop] ,
                      [FItemID] ,
                      [FQty] ,
         
                            0 ,
                            0 ,
                            0 ,
                            0 ,
                            0 ,
                            0 ,
                            0
                    FROM    seorder t
                            JOIN SEOrderEntry t1 ON t.FInterID = t1.FInterID
                                                    AND t.FBillNo = @FBillNo
                                                    AND t1.fentryid = @fentryid
                            JOIN cbCostObj a ON a.FStdProductID = t1.FItemID
                            LEFT JOIN t_Item_3001 d ON d.FItemID = t.FHeadSelfS0140
                            LEFT JOIN ( SELECT DISTINCT
                                                FNumber ,
                                                FInterID
                                        FROM    vicbom
                                        WHERE   fusestatus = '使用'
                                      ) b ON a.FNumber = b.FNumber
                    ORDER BY t.FInterID

            UPDATE  IcBillNo
            SET     fcurno = fcurno + 1
            WHERE   FBILLNAME = '生产任务单'
  
--commit transaction
            SELECT  'succeed ' 
        END TRY	
        BEGIN CATCH	
            SELECT ERROR_MESSAGE()
            IF @@TRANCOUNT>0
            ROLLBACK TRANSACTION
 
        END CATCH	
    END
超过长度了,中间的我删掉了一部分,,你自己补全
yuzhifu1 2017-08-17
  • 打赏
  • 举报
回复
不好意思,我太笨了,这个应用到我的存储过程上加在哪呢,有点搞不明白。
二月十六 2017-08-17
  • 打赏
  • 举报
回复
写个try catch捕获一下错误信息返回就行了
http://blog.csdn.net/y_f123/article/details/51062956
OwenZeng_DBA 2017-08-17
  • 打赏
  • 举报
回复
引用 5 楼 z10843087 的回复:
[quote=引用 2 楼 yuzhifu1 的回复:] 那返回输出参数怎么写呢,特别是错误信息
可以在CATCH里面捕捉错误信息 比如下面的例子:
BEGIN TRY 
SELECT 1/0
  select  'succeed '
END TRY
BEGIN CATCH
        
	SELECT ERROR_MESSAGE()
END catch
你把这个错误的信息返回到程序里面去,然后在程序里面展示就可以了[/quote] 补充了下,你在try的最后可以返回成功的消息
OwenZeng_DBA 2017-08-17
  • 打赏
  • 举报
回复
引用 2 楼 yuzhifu1 的回复:
那返回输出参数怎么写呢,特别是错误信息
可以在CATCH里面捕捉错误信息 比如下面的例子:
BEGIN TRY 
SELECT 1/0
END TRY
BEGIN CATCH
 
	SELECT ERROR_MESSAGE()
END catch
你把这个错误的信息返回到程序里面去,然后在程序里面展示就可以了
yuzhifu1 2017-08-17
  • 打赏
  • 举报
回复
怎么写呢???
  • 打赏
  • 举报
回复
在那个 失败的 数据 加print 在消息提示窗看
yuzhifu1 2017-08-17
  • 打赏
  • 举报
回复
那返回输出参数怎么写呢,特别是错误信息
二月十六 2017-08-17
  • 打赏
  • 举报
回复
存储过程没办法实现弹框效果。 存储过程可以把执行成功失败的结果返回给程序,然后程序来做弹框。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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