커밋하기 전에 결과를 검사 할 수 있도록 트랜잭션에서 다음 SQL 업데이트 쿼리를 실행하고 있습니다. 그러나, 실행 및 롤백 후, 나는 그것이 이미 커밋을 발견하고 내 데이터는 커밋 성명을 발표하지 않고 변경되었습니다.SQL 트랜잭션 자체 커밋
USE WS_Live
BEGIN TRAN Test
UPDATE AF
SET AF.AdditionalFieldsLookup11 = NULL
OUTPUT inserted.*
FROM dbo.Incident AS I
INNER JOIN dbo.AdditionalFields AS AF
ON AF.Oid = I.AdditionalFields
INNER JOIN dbo.AdditionalFieldsLookup11 AS AFL11
ON AFL11.Oid = AF.AdditionalFieldsLookup11
WHERE AF.AdditionalFieldsLookup11 IS NOT NULL
내 문을 올바르게 포맷하고 있었고, 난 중요한 데이터가 손실되지 않았지만, 나는이 내가 미래에 문제가 실행되지 않도록 일어나는 이유를 알고 싶습니다.
롤백 할 수 있었던 다른 트랜잭션을 수행했습니다. 왜 어떤 사람들은 다른 사람들보다 일할 수 있습니까? – NonSecwitter
첫 번째 링크에서 내 'BEGIN'이 자동 커밋을 무시해야합니다. 'BEGIN TRANSACTION 문이 명시 적 트랜잭션을 시작하거나 암시 적 트랜잭션 모드가 설정 될 때까지 SQL Server 연결은 자동 커밋 모드로 작동합니다. ' – NonSecwitter
오 기다려 ... 내가 한 일을 알아. SQL 쿼리가 끝날 때'ROLLBACK TRAN Test'를하는 대신에'BEGIN'을'ROLLBACK'으로 대체 했으므로 명령을 추가 한 것처럼 효과적으로 이전 트랜잭션을 롤백 한 다음 전체 쿼리를 실행하기 시작했습니다 'ROLLBACK' 줄 다음에. – NonSecwitter