USE BFSDB
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'up_InsertBFSBusinessInfo')
BEGIN
DROP Procedure up_InsertBFSBusinessInfo
ENDGO/******************************************************************************
** File: up_InsertBFSBusinessInfo.Sql
** Name: up_InsertBFSBusinessInfo
** Desc: 添加CPC请求的业务信息
** Return Value:
**
** Auth:
** Date: 2008-04-23
*******************************************************************************
** Change History
*******************************************************************************
** Date: Author: Description:
** -------- -------- ---------------------------------------
**
*******************************************************************************/
CREATE Procedure up_InsertBFSBusinessInfo
(
@BusinessGuid varchar(50) , -- 系统内部编号
@CPCXmlData text , -- CPC报文数据
@TransCode varchar(4) , -- 交易码
@InitBranchId varchar(4) , -- 流程发起机构号
@InitUserId varchar(8) , -- 流程发起柜员号
@TransactionDate varchar(20) , -- 当前日期
@BusinessId varchar(20) , -- 业务流水号
@BusinessType varchar(5) , -- 业务种类
@BusinessInitBranchId varchar(4) , -- 业务发起机构号
@ExchangeDate varchar(8) , -- 交换日期
@ExchangeRound varchar(1) , -- 交换场次
@ImageFilePath varchar(100) , -- 影像路径
@ImageFileName varchar(1000) , -- 影像名称
@CurrencyType varchar(3) , -- 币种
@VoucherType varchar(2), -- 票据种类
@VoucherNo varchar(12) , -- 票据号码
@PayeeAccountNo varchar(32) , -- 收款人账号
@PayeeFullName varchar(62) , -- 收款人名称
@PayerAccountNo varchar(32) , -- 出票人账号
@PayerFullName varchar(62) , -- 出票人名称
@Amount decimal(18,2) , -- 金额
@VoucherIssueDate varchar(8) , -- 出票日期
@PaymentCode varchar(16) , -- 支付密码
@ExchangeBranchId varchar(12) , -- 提出行行号
@ExchangeInBranchNo varchar(12) , -- 提回行行号
@PaperFlag varchar(1) , -- 纸票标志
@Comments varchar(60) , -- 注释
@MaxEndorseIndex varchar(3) , -- 最大粘单索引
@SopSSN varchar(12) , -- 柜员流水号
@ProcessBeginTime datetime, --处理开始时间
@ProcessEndTime datetime, --处理结束时间
@ProcessStatus int , -- 处理状态
@Re text -- 描述
)AS
BEGIN TRANSACTION Tran_BFS1declare @n int
select @n=count(*) from BFS_BusinessInfo with (nolock) where BusinessId= @BusinessIdif (@n>0)
begin
--删除已存在的影像存储信息
delete from BFS_ImageStoreInfo
where BusinessGuid=(
select BusinessGuid from BFS_BusinessInfo with (nolock)
where BusinessId= @BusinessId )
endIF (@@ERROR<>0)
begin
ROLLBACK TRANSACTION Tran_BFS1
return 100
end
ELSE
COMMIT TRANSACTION Tran_BFS1BEGIN TRANSACTION Tran_delete
if (@n>0)
begin
--删除已存在的业务信息
delete from BFS_BusinessInfo
where BusinessId=@BusinessId
end
IF (@@ERROR<>0)
begin
ROLLBACK TRANSACTION Tran_delete
return 100
end
ELSE
COMMIT TRANSACTION Tran_deleteBEGIN TRANSACTION Tran_BFS2
--添加一条新记录insert into BFS_BusinessInfo with (rowlock)
(
BusinessGuid,
CPCXmlData,
TransCode ,
InitBranchId,
InitUserId ,
TransactionDate ,
BusinessId ,
BusinessType ,
BusinessInitBranchId ,
ExchangeDate ,
ExchangeRound ,
ImageFilePath ,
ImageFileName,
CurrencyType,
VoucherType ,
VoucherNo ,
PayeeAccountNo,
PayeeFullName ,
PayerAccountNo,
PayerFullName ,
Amount,
VoucherIssueDate ,
PaymentCode ,
ExchangeBranchId ,
ExchangeInBranchNo ,
PaperFlag ,
Comments ,
MaxEndorseIndex ,
SopSSN ,
ProcessBeginTime,
ProcessEndTime,
ProcessStatus,
Re )
values
(
@BusinessGuid,
@CPCXmlData,
@TransCode ,
@InitBranchId,
@InitUserId ,
@TransactionDate ,
@BusinessId ,
@BusinessType ,
@BusinessInitBranchId ,
@ExchangeDate ,
@ExchangeRound ,
@ImageFilePath ,
@ImageFileName,
@CurrencyType,
@VoucherType ,
@VoucherNo ,
@PayeeAccountNo,
@PayeeFullName ,
@PayerAccountNo,
@PayerFullName ,
@Amount,
@VoucherIssueDate ,
@PaymentCode ,
@ExchangeBranchId ,
@ExchangeInBranchNo ,
@PaperFlag ,
@Comments ,
@MaxEndorseIndex ,
@SopSSN ,
@ProcessBeginTime,
@ProcessEndTime,
@ProcessStatus ,
@Re )
IF (@@ERROR<>0)
ROLLBACK TRANSACTION Tran_BFS2
ELSE
COMMIT TRANSACTION Tran_BFS2returnGO 请大家帮我看看上面的存储过程,会发生死锁吗?
如果会发生要怎么解决。谢谢了。
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'up_InsertBFSBusinessInfo')
BEGIN
DROP Procedure up_InsertBFSBusinessInfo
ENDGO/******************************************************************************
** File: up_InsertBFSBusinessInfo.Sql
** Name: up_InsertBFSBusinessInfo
** Desc: 添加CPC请求的业务信息
** Return Value:
**
** Auth:
** Date: 2008-04-23
*******************************************************************************
** Change History
*******************************************************************************
** Date: Author: Description:
** -------- -------- ---------------------------------------
**
*******************************************************************************/
CREATE Procedure up_InsertBFSBusinessInfo
(
@BusinessGuid varchar(50) , -- 系统内部编号
@CPCXmlData text , -- CPC报文数据
@TransCode varchar(4) , -- 交易码
@InitBranchId varchar(4) , -- 流程发起机构号
@InitUserId varchar(8) , -- 流程发起柜员号
@TransactionDate varchar(20) , -- 当前日期
@BusinessId varchar(20) , -- 业务流水号
@BusinessType varchar(5) , -- 业务种类
@BusinessInitBranchId varchar(4) , -- 业务发起机构号
@ExchangeDate varchar(8) , -- 交换日期
@ExchangeRound varchar(1) , -- 交换场次
@ImageFilePath varchar(100) , -- 影像路径
@ImageFileName varchar(1000) , -- 影像名称
@CurrencyType varchar(3) , -- 币种
@VoucherType varchar(2), -- 票据种类
@VoucherNo varchar(12) , -- 票据号码
@PayeeAccountNo varchar(32) , -- 收款人账号
@PayeeFullName varchar(62) , -- 收款人名称
@PayerAccountNo varchar(32) , -- 出票人账号
@PayerFullName varchar(62) , -- 出票人名称
@Amount decimal(18,2) , -- 金额
@VoucherIssueDate varchar(8) , -- 出票日期
@PaymentCode varchar(16) , -- 支付密码
@ExchangeBranchId varchar(12) , -- 提出行行号
@ExchangeInBranchNo varchar(12) , -- 提回行行号
@PaperFlag varchar(1) , -- 纸票标志
@Comments varchar(60) , -- 注释
@MaxEndorseIndex varchar(3) , -- 最大粘单索引
@SopSSN varchar(12) , -- 柜员流水号
@ProcessBeginTime datetime, --处理开始时间
@ProcessEndTime datetime, --处理结束时间
@ProcessStatus int , -- 处理状态
@Re text -- 描述
)AS
BEGIN TRANSACTION Tran_BFS1declare @n int
select @n=count(*) from BFS_BusinessInfo with (nolock) where BusinessId= @BusinessIdif (@n>0)
begin
--删除已存在的影像存储信息
delete from BFS_ImageStoreInfo
where BusinessGuid=(
select BusinessGuid from BFS_BusinessInfo with (nolock)
where BusinessId= @BusinessId )
endIF (@@ERROR<>0)
begin
ROLLBACK TRANSACTION Tran_BFS1
return 100
end
ELSE
COMMIT TRANSACTION Tran_BFS1BEGIN TRANSACTION Tran_delete
if (@n>0)
begin
--删除已存在的业务信息
delete from BFS_BusinessInfo
where BusinessId=@BusinessId
end
IF (@@ERROR<>0)
begin
ROLLBACK TRANSACTION Tran_delete
return 100
end
ELSE
COMMIT TRANSACTION Tran_deleteBEGIN TRANSACTION Tran_BFS2
--添加一条新记录insert into BFS_BusinessInfo with (rowlock)
(
BusinessGuid,
CPCXmlData,
TransCode ,
InitBranchId,
InitUserId ,
TransactionDate ,
BusinessId ,
BusinessType ,
BusinessInitBranchId ,
ExchangeDate ,
ExchangeRound ,
ImageFilePath ,
ImageFileName,
CurrencyType,
VoucherType ,
VoucherNo ,
PayeeAccountNo,
PayeeFullName ,
PayerAccountNo,
PayerFullName ,
Amount,
VoucherIssueDate ,
PaymentCode ,
ExchangeBranchId ,
ExchangeInBranchNo ,
PaperFlag ,
Comments ,
MaxEndorseIndex ,
SopSSN ,
ProcessBeginTime,
ProcessEndTime,
ProcessStatus,
Re )
values
(
@BusinessGuid,
@CPCXmlData,
@TransCode ,
@InitBranchId,
@InitUserId ,
@TransactionDate ,
@BusinessId ,
@BusinessType ,
@BusinessInitBranchId ,
@ExchangeDate ,
@ExchangeRound ,
@ImageFilePath ,
@ImageFileName,
@CurrencyType,
@VoucherType ,
@VoucherNo ,
@PayeeAccountNo,
@PayeeFullName ,
@PayerAccountNo,
@PayerFullName ,
@Amount,
@VoucherIssueDate ,
@PaymentCode ,
@ExchangeBranchId ,
@ExchangeInBranchNo ,
@PaperFlag ,
@Comments ,
@MaxEndorseIndex ,
@SopSSN ,
@ProcessBeginTime,
@ProcessEndTime,
@ProcessStatus ,
@Re )
IF (@@ERROR<>0)
ROLLBACK TRANSACTION Tran_BFS2
ELSE
COMMIT TRANSACTION Tran_BFS2returnGO 请大家帮我看看上面的存储过程,会发生死锁吗?
如果会发生要怎么解决。谢谢了。
慢慢查一查
这个方法是不是笔只有一个事务强点。
不要使用过于复杂的判断在你的事务中
在比较复杂的环境中测试你的程序,会显露出在简单环境中发现不了的问题