Files
lserp_cs_5.0/新增SQL/20150126/单据审核强制回退判断增加提示信息.sql
T
2026-07-10 15:25:05 +08:00

89 lines
5.3 KiB
Transact-SQL


alter table P_RollBackConfigTab add UserMsg varchar(200)
go
/****** Object: StoredProcedure [dbo].[P_VerfyRollBackConfig] Script Date: 01/26/2015 22:26:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: gyc
-- Create date: 2014-12-22
-- Description: 验证当前单据是否可以回退
-- =============================================
/*
DECLARE @msg VARCHAR(3000)
EXEC [P_VerfyRollBackConfig] 'SLY14120001','12034',@msg OUTPUT
SELECT @msg
*/
ALTER PROCEDURE [dbo].[P_VerfyRollBackConfig]
@BilldocumentId VARCHAR(40),
@BillTypeCode VARCHAR(20),
@Msg VARCHAR(3000) OUTPUT
AS
BEGIN
-- 验证参数
IF ISNULL(@BilldocumentId,'')='' OR ISNULL(@BillTypeCode,'')=''
BEGIN
SET @Msg='参数传递错误.'
GOTO ERROR
END
BEGIN TRY
IF EXISTS(SELECT 1 FROM P_RollBackConfigTab WHERE BillCode=@BillTypeCode)
BEGIN
DECLARE @Sql NVARCHAR(MAX),@BillCode VARCHAR(10),@BillDesc VARCHAR(50),@BillTableName VARCHAR(50),
@BillFieldKey VARCHAR(50),@NextBillCode VARCHAR(10),@NextBillDesc VARCHAR(50),
@NextBillFieldKey VARCHAR(50),@NextBillTableName VARCHAR(50),@Result INT,
@UserMessage varchar(200)
DECLARE MyCursor CURSOR FOR
SELECT BillCode,BillDesc,BillFieldKey,BillTableName,NextBillCode,
NextBillDesc,NextBillFieldKey,NextBillTableName,userMsg
FROM P_RollBackConfigTab
WHERE BillCode=@BillTypeCode
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @BillCode,@BillDesc,@BillFieldKey,@BillTableName,
@NextBillCode,@NextBillDesc,@NextBillFieldKey,@NextBillTableName,@UserMessage
WHILE @@FETCH_STATUS=0
BEGIN
-- 验证是否可以回退
SET @Sql = 'SELECT @Result=COUNT(1) FROM '+@BillTableName+' a'+
' INNER JOIN '+@NextBillTableName+' b ON a.'+@BillFieldKey+'=b.'+@NextBillFieldKey+''+
' WHERE a.Billdocument_Id='+QUOTENAME(@BilldocumentId,'''')
EXEC SP_EXECUTESQL @Sql,N'@Result INT OUTPUT',@Result OUTPUT
IF ISNULL(@Result,0) > 0
BEGIN
if ISNULL(@UserMessage,'')=''
SET @Msg= @NextBillDesc+'单据中已经引用'+@BillDesc+'单据,无法回退.'
else
set @msg=@UserMessage
GOTO ERROR
END
FETCH NEXT FROM MyCursor INTO @BillCode,@BillDesc,@BillFieldKey,@BillTableName,
@NextBillCode,@NextBillDesc,@NextBillFieldKey,@NextBillTableName
END
CLOSE MyCursor -- 关闭游标
DEALLOCATE MyCursor -- 释放游标
END
END TRY
BEGIN CATCH
SET @msg=LEFT(ERROR_MESSAGE(),3000)
GOTO ERROR
END CATCH
RETURN 1
ERROR:
IF EXISTS(SELECT 1 FROM MASTER.dbo.SYSCURSORS WHERE cursor_name='MyCursor')
BEGIN
CLOSE MyCursor -- 关闭游标
DEALLOCATE MyCursor -- 释放游标
END
RETURN -1
END