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)