Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Transactions SQLException:事务开始/提交不匹配_Transactions_Sqlexception - Fatal编程技术网

Transactions SQLException:事务开始/提交不匹配

Transactions SQLException:事务开始/提交不匹配,transactions,sqlexception,Transactions,Sqlexception,我看过这些帖子,试图解决这个问题,但没有成功。这是代码。帮助解决同样的问题 我有一个过程调用另一个过程 调用程序: ALTER PROCEDURE [dbo].[DadSaveMembership] @PERSON AS [dbo].[Person_Master_Type] Readonly, @ADDRESS AS [dbo].[Address_Master_Type] Readonly, @MEMBERSHIP AS [dbo].[Membership_Type] Readonly AS

我看过这些帖子,试图解决这个问题,但没有成功。这是代码。帮助解决同样的问题

我有一个过程调用另一个过程

调用程序:

ALTER PROCEDURE [dbo].[DadSaveMembership]
@PERSON AS [dbo].[Person_Master_Type] Readonly,
@ADDRESS AS [dbo].[Address_Master_Type] Readonly, 
@MEMBERSHIP AS [dbo].[Membership_Type] Readonly

AS
BEGIN

declare @pid int, @aid int, @CUR_PID int, @CUR_ADD int, @atype int, @created_by int
declare @created_date date

select @pid=person_id from @PERSON
select @aid=address_id from @ADDRESS

if(@pid=0)
begin
    INSERT INTO PERSON_MASTER (TITLE,FNAME,MNAME,LNAME,DOB,GENDER,MARITALSTATUS,MOBILE,EMAIL,CREATED_BY,CREATED_DATE)
    SELECT TITLE,FNAME,MNAME,LNAME,DOB,GENDER,MARITALSTATUS,MOBILE,EMAIL,CREATED_BY,CREATED_DATE FROM @PERSON
    SELECT @CUR_PID=MAX(PERSON_ID) FROM PERSON_MASTER
end
else
begin
    set @CUR_PID=@pid
end

if(@aid=0)
begin
    INSERT INTO ADDRESS_MASTER (ADDRESS1,ADDRESS2,ADDRESS3,CITY_ID,PINCODE,PHONE,CREATED_BY,CREATED_DATE)
    SELECT ADDRESS1,ADDRESS2,ADDRESS3,CITY_ID,PINCODE,PHONE,CREATED_BY,CREATED_DATE FROM @ADDRESS
    SELECT @CUR_ADD=MAX(ADDRESS_ID) FROM ADDRESS_MASTER
end
else
begin
    set @CUR_ADD=@aid
end



EXEC [dbo].[GET_DAD_COUNT_AID$IMPL$AUTO] @CUR_PID, "3", @CUR_ADD, @atype OUTPUT

INSERT INTO PERSON_MODULE_LINK (PERSON_ID,MODULE_ID,ADDRESS_ID,ADDRESS_TYPE,CREATED_BY,CREATED_DATE) 
VALUES (@CUR_PID,3,@CUR_ADD,@atype,@CREATED_BY,@CREATED_DATE)

END
另一个程序如下

ALTER PROCEDURE [dbo].[GET_DAD_COUNT_AID$IMPL$AUTO]  
@pid int,
@modid int,
@addrid int,
@return_value_argument int  OUTPUT
AS 

BEGIN

  SET  IMPLICIT_TRANSACTIONS  ON

  DECLARE
     @cnt int, 
     @cnt1 int


  SELECT @cnt1 = isnull(max(CAST(ADDRESS_HISTORY_DETAIL.ADDRESS_TYPE AS numeric(38, 10))), 0)
  FROM dbo.ADDRESS_HISTORY_DETAIL
  WHERE 
     ADDRESS_HISTORY_DETAIL.PERSON_ID = @pid AND 
     ADDRESS_HISTORY_DETAIL.MODULE_ID = @modid AND 
     ADDRESS_HISTORY_DETAIL.ADDRESS_ID = @addrid



  SELECT @cnt = isnull(max(CAST(PERSON_MODULE_LINK.ADDRESS_TYPE AS numeric(38, 10))), 0)
  FROM dbo.PERSON_MODULE_LINK
  WHERE 
     PERSON_MODULE_LINK.PERSON_ID = @pid AND 
     PERSON_MODULE_LINK.MODULE_ID = @modid AND 
     PERSON_MODULE_LINK.ADDRESS_ID = @addrid



  IF @cnt1 > @cnt
     BEGIN

        SET @return_value_argument = @cnt1+1

        RETURN 

     END
  ELSE 
     BEGIN

        SET @return_value_argument = @cnt+1

        RETURN 

     END

END
问题是调用DadSaveMembership时出现以下错误:
超时已过期。操作完成前已过超时时间,或者服务器没有响应。那么,问题出在哪里?

我怀疑问题出在GET\u DAD\u COUNT\u AID$IMPL$AUTO存储过程中的
SET IMPLICIT\u TRANSACTIONS ON
命令上。阅读它会发现,通过设置命令并执行SELECT命令,创建了一个事务,但从未提交或回滚。您可以在事务中包装原始SP BEGIN
transaction
+
COMMIT
/
ROLLBACK
或同时删除该语句

你也应该考虑替换这两个语句:

SELECT @CUR_ADD=MAX(ADDRESS_ID) FROM ADDRESS_MASTER
SELECT @CUR_PID=MAX(PERSON_ID) FROM PERSON_MASTER
有了这些:

SELECT @CUR_ADD = SCOPE_IDENTITY()
SELECT @CUR_PID = SCOPE_IDENTITY()

实际问题是什么?您已经发布了两个问题,但没有说明问题是什么。请编辑我的问题以说明实际问题