89 lines
5.3 KiB
Transact-SQL
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
|