0

SQL Server で sqlcmd ツールを使用してスクリプトを実行しています。スクリプトはレコードを追加/更新します。スクリプトがエラーをスローした場合、実行を停止して 0 以外の戻り値を返すには、sqlcmd が必要です。私は以下がうまくいくと思ったが、うまくいかない。

    DECLARE @intErrorCode INT
BEGIN TRAN T1;

SET IDENTITY_INSERT dbo.SomeTable ON 

INSERT INTO dbo.SomeTable(some_type_id,some_type,code_definition,use_some_lookup,created_by,created_on,modified_by,modified_on,org_some)
VALUES(0,'yadayada','None','N','system',GETDATE(),'system',GETDATE(),'N')

 SELECT @intErrorCode = @@ERROR
    IF (@intErrorCode <> 0) GOTO PROBLEM

SET IDENTITY_INSERT dbo.SomeTable OFF


UPDATE dbo.SomeTable 
SET some_type = 'Contract Analytical'
WHERE some_type_id = 2

 SELECT @intErrorCode = @@ERROR
    IF (@intErrorCode <> 0) GOTO PROBLEM



PROBLEM:
IF (@intErrorCode <> 0) BEGIN
PRINT 'Unexpected error occurred!'
    ROLLBACK TRAN
    SELECT @intErrorCode
    RETURN
END
COMMIT TRAN T1;
4

3 に答える 3

2

-bエラー時に停止するには、 on error batch abortオプションを指定して sqlcmd を開始します。

于 2009-09-01T20:21:18.810 に答える
0

ゼロ以外の戻り値が必要な場合は、 @intErrorCode で値を返すことができます

アラ

RETURN @intErrorCode

これを選択すると、戻り値ではなく結果セットで返されます。

于 2009-09-01T20:21:36.580 に答える
0

try-catch を使用してみてください:

DECLARE @intErrorCode INT
BEGIN TRY
    BEGIN TRAN T1;

    SET IDENTITY_INSERT dbo.SomeTable ON 

    INSERT INTO dbo.SomeTable (some_type_id,some_type,code_definition,use_some_lookup,created_by,created_on,modified_by,modified_on,org_some)
        VALUES(0,'yadayada','None','N','system',GETDATE(),'system',GETDATE(),'N')

    SET IDENTITY_INSERT dbo.SomeTable OFF


    UPDATE dbo.SomeTable 
        SET some_type = 'Contract Analytical'
        WHERE some_type_id = 2

END TRY
BEGIN CATCH

    IF XACT_STATE()!=0
    BEGIN
        ROLLBACK TRANSACTION
    END

    SELECT
        ,ERROR_NUMBER() AS ErrorNumber --same as @@ERROR
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage

    PRINT 'Unexpected error occurred!'
    RETURN 999

END CATCH
COMMIT TRAN T1;
RETURN 0
于 2009-09-01T20:28:05.380 に答える