如何在截断字符串数据时回滚TSQL中的事务?

Tor*_*ups 32 t-sql sql-server error-handling

目前我有一个大的导入过程,我试图在事务中包装,所以如果有什么中断 - 我可以回滚.我遇到的问题是,当trans中的TSQL爆炸时,当发生以下SQL错误时它不会回滚

Msg 8152, Level 16, State 14, Line 249
String or binary data would be truncated.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

下面包装了这个导入TSQL

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
Run Code Online (Sandbox Code Playgroud)

Jos*_*rke 80

如果您在SQL 2005上可以尝试:

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
Run Code Online (Sandbox Code Playgroud)