[SQL] SQL Server의 트랜잭션의 올바른 사용
SQLSQL Server의 트랜잭션의 올바른 사용
나는이 개 명령이 있고 둘 다 제대로 실행 또는 그들 중 누구도 실행되지해야합니다. 내가 생각하는 그래서 나는 트랜잭션이 필요하지만 올바르게 사용하는 방법을 모르겠어요.
다음 스크립트의 문제는 무엇입니까?
BEGIN TRANSACTION [Tran1]
INSERT INTO [Test].[dbo].[T1]
([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)
UPDATE [Test].[dbo].[T1]
SET [Title] = N'az2' ,[AVG] = 1
WHERE [dbo].[T1].[Title] = N'az'
COMMIT TRANSACTION [Tran1]
GO
INSERT 명령이 실행되지만, UPDATE 명령은 문제가있다.
그 중 하나가 실행에 오류가있을 경우 어떻게이 두 명령을 롤백 구현할 수있다?
해결법
-
==============================
1.트랜잭션이 트랜잭션이 롤백 실패 할 경우 트랜잭션이, 그 변경 내용을 커밋합니다 성공하면, try / catch 블록을 추가합니다 :
트랜잭션이 트랜잭션이 롤백 실패 할 경우 트랜잭션이, 그 변경 내용을 커밋합니다 성공하면, try / catch 블록을 추가합니다 :
BEGIN TRANSACTION [Tran1] BEGIN TRY INSERT INTO [Test].[dbo].[T1] ([Title], [AVG]) VALUES ('Tidd130', 130), ('Tidd230', 230) UPDATE [Test].[dbo].[T1] SET [Title] = N'az2' ,[AVG] = 1 WHERE [dbo].[T1].[Title] = N'az' COMMIT TRANSACTION [Tran1] END TRY BEGIN CATCH ROLLBACK TRANSACTION [Tran1] END CATCH
-
==============================
2.저장 프로 시저의 처음 부분에서 오류가 발생하는 경우에 자동으로 롤백 거래는 SQL 서버에 지시하려면 SET XACT_ABORT ON을 넣어해야합니다. ommited 각 문 또는 사용 TRY ... CATCH 롤백 블록 후 OFF로 테스트 @@ ERROR 한 요구 사항을 설정합니다.
저장 프로 시저의 처음 부분에서 오류가 발생하는 경우에 자동으로 롤백 거래는 SQL 서버에 지시하려면 SET XACT_ABORT ON을 넣어해야합니다. ommited 각 문 또는 사용 TRY ... CATCH 롤백 블록 후 OFF로 테스트 @@ ERROR 한 요구 사항을 설정합니다.
-
==============================
3.쉬운 방법 :
쉬운 방법 :
CREATE TABLE T ( C [nvarchar](100) NOT NULL UNIQUE, ); SET XACT_ABORT ON -- Turns on rollback if T-SQL statement raises a run-time error. SELECT * FROM T; -- Check before. BEGIN TRAN INSERT INTO T VALUES ('A'); INSERT INTO T VALUES ('B'); INSERT INTO T VALUES ('B'); INSERT INTO T VALUES ('C'); COMMIT TRAN SELECT * FROM T; -- Check after. DELETE T;
from https://stackoverflow.com/questions/10153648/correct-use-of-transactions-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 결과가 반환 SQL은 "여기서하지 하위 쿼리 선택" (0) | 2020.05.06 |
---|---|
[SQL] 열에 고유 값의 수를 찾을 수 SQL (0) | 2020.05.06 |
[SQL] 오라클 키워드 "으로 파티션" (0) | 2020.05.06 |
[SQL] SQL Server의 '테이블을 설명'에 해당 무엇입니까? (0) | 2020.05.06 |
[SQL] 스크립트가 데이터베이스에 모든 연결을 죽일 (더 RESTRICTED_USER ROLLBACK 이상) (0) | 2020.05.06 |