Cum să rollback o tranzacție în TSQL când șir de date este trunchiat?

voturi
32

În prezent, am un proces mare de import pe care am încercat să-și încheie în interiorul unei tranzacții astfel încât, dacă ceva se rupe - i-ar putea derula înapoi. Problema am este că, atunci când TSQL în interiorul trans suflă în sus, aceasta nu se va derula înapoi atunci când are loc următoarea eroare SQL

Msg 8152, Level 16, State 14, Line 249
String or binary data would be truncated.
The statement has been terminated.

Nota de mai jos infasoara acest TSQL import

DECLARE @error INT
SELECT @error = 0
BEGIN TRANSACTION

--** begin import TSQL

--** end import TSQL

SELECT @error = @@error 
IF @error != 0 GOTO handle_error

COMMIT

handle_error: 
IF @error != 0 
BEGIN 
ROLLBACK 
END
Întrebat 12/03/2009 la 14:43
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
20

Cum despre activarea xact_abort

set xact_abort on
Publicat 12/03/2009 la 14:45
sursa de către utilizator

voturi
79

În cazul în care pe SQL 2005 puteți încerca:

BEGIN TRANSACTION
BEGIN TRY
    --Run your Statements
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
        ROLLBACK TRANSACTION
        DECLARE @Msg NVARCHAR(MAX)  
        SELECT @Msg=ERROR_MESSAGE() 
        RAISERROR('Error Occured: %s', 20, 101,@msg) WITH LOG
END CATCH
Publicat 12/03/2009 la 14:53
sursa de către utilizator

voturi
0

De asemenea, aș sublinia faptul că, dacă primiți această eroare de multe ori, trebuie să revizuiască dimensiunea coloanei pe care introducerea de date în sau ajusta procesul de curățare pentru a te pregatesti datele înainte de a pune in tabelul de prod. În SSIS, ai putea avea, de asemenea, datele care deosn't îndeplinesc dimensiunea standard du-te la un tabel de date proaste și procesa restul.

Publicat 12/03/2009 la 18:24
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more