0

SQL Server 2008 SP3 (10.0.5500)을 사용하고 있습니다. 롤백 트랜잭션과 관련하여 몇 가지 문제가 있습니다. 우선 뭔가 알고 있어야합니다. SET XACT_ABORT ON이 작성 절차에서 작동하지 않음

USE [MYDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET XACT_ABORT ON 
GO 

If Exists(Select * From Sys.Objects Where [object_id]=Object_Id(N'[Members].[MyProc]') And ObjectProperty([object_id], N'IsProcedure') = 1) 
Begin 
Drop Procedure [Members].[MyProc] 
Print 'Procedure [Members].[MyProc] Dropped!' 
End 
GO 

CREATE PROCEDURE [Members].[MyProc](

.... 

) 
AS 
BEGIN 
    BEGIN TRANSACTION [MyProcCHK] 
    .... 
    COMMIT TRANSACTION [MyProcCHK] 
END 
GO 

그리고 실행이 스크립트 후

, 나는에서 절차를 확인하십시오 : MyDB ->Programmability->StoredProcedures 다음이 스크립트가 표시됩니다 [Members].[MyProc]을 수정하기 위해 클릭

USE [MYDB] 
GO 
/****** Object: StoredProcedure ... ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [Members].[MyProc](

.... 

) 
AS 
BEGIN 
    BEGIN TRANSACTION [MyProcCHK] 
    .... 
    COMMIT TRANSACTION [MyProcCHK] 
END 
GO 

을 어디 SET XACT_ABORT ON 인이 내 생성 절차 스크립트입니다? 왜 여기에 표시되지 않습니까? 저장 프로 시저에서 롤백 트랜잭션에 몇 가지 문제가 있기 때문에 나는 결코 SET XACT_ABORT ON이 저장되지 않았다고 생각합니다. 내가 맞습니까? 그렇다면 해결책은 무엇입니까? 저장 프로 시저에 SET XACT_ABORT ON을 사용할 수 없습니까? 또는 내 잘못은 어디에 있습니까? 내가 그랬던 것처럼 예,

답변

1

당신은 작성 절차 문

CREATE PROCEDURE [Members].[MyProc](
........ 

) 
AS 
SET XACT_ABORT ON 
BEGIN 
BEGIN TRANSACTION [MyProcCHK] 
.... 
COMMIT TRANSACTION [MyProcCHK] 
END 
GO 
+0

감사 내부 set xact_abort on을 언급해야하고, 단지 내부의 문은 충분하다, 외부 넣을 필요가 없다? –

+0

은 create 문 안에 언급하는 것으로 충분합니다. 밖에서 언급 할 필요가 없다. – praveen

관련 문제