現在、私はトランザクション内でラップしようとしている大きなインポートプロセスを持っているので、何かが壊れた場合はロールバックできます。私が抱えている問題は、トランス内のTSQLが爆発したときに、次のSQLエラーが発生してもロールバックされないことです。
Msg 8152, Level 16, State 14, Line 249
String or binary data would be truncated.
The statement has been terminated.
以下はこのインポート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
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
xact_abort をオンにするのはどうですか
set xact_abort on
このエラーが頻繁に発生する場合は、データを入力する列のサイズを修正するか、クリーニングプロセスを調整してデータを準備してからprodテーブルに入力する必要があることも指摘しておきます。 SSISでは、標準サイズを満たさないデータを不良データテーブルに移動させ、残りを処理させることもできます。