sql >> データベース >  >> RDS >> Sqlserver

T-SQL をロールバックできませんでした

    DDLエラーの重大度処理を使用したSql Serverの処理についてできることは何もないと思います.一部はSql Server自体によって自動的に処理されます(たとえば、強制的にトランザクションをロールバックします)。

    あなたにできることは、スクリプト コードをそれに対応させ、スクリプト ユーザーに説明的なエラーを提供することです。

    例:

    --  drop table thetransformersmorethanmeetstheeye
    --  select * from thetransformersmorethanmeetstheeye
    
    
    
    --  first batch begins here         
    
        begin tran
    
        create table thetransformersmorethanmeetstheeye(i int); -- non-erring if not yet existing
    
        -- even there's an error here, @@ERROR will be 0 on next batch
        ALTER TABLE [dbo].[Table1]  WITH CHECK ADD  CONSTRAINT [FK_constraint] FOREIGN KEY([field1], [field2])
        REFERENCES [dbo].[Table2] ([field3], [field4]);             
    
    go  -- first batch ends here
    
    
    
    --  second batch begins here
    
        if @@TRANCOUNT > 0 begin        
            PRINT 'I have a control here if things needed be committed or rolled back';
    
            -- @@ERROR is always zero here, even there's an error before the GO batch. 
            -- @@ERROR cannot span two batches, it's always gets reset to zero on next batch
            PRINT @@ERROR; 
    
    
            -- But you can choose whether to COMMIT or ROLLBACK non-erring things here
            -- COMMIT TRAN;
            -- ROLLBACK TRAN;
    
        end
        else if @@TRANCOUNT = 0 begin
            PRINT 'Sql Server automatically rollback the transaction. Nothing can do about it';
        end
        else begin
            PRINT 'Anomaly occured, @@TRANCOUNT cannot be -1, report this to Microsoft!';
        end
    
    --  second batch implicitly ends here   
      

    1. MySQLはWindowsのどこにデータベースファイルを保存し、ファイルの名前は何ですか?

    2. CSVを解析し、GrailsのMysqlデータベースにエクスポートします

    3. MariaDBでのSUBDATE()のしくみ

    4. MySQLで予約語をテーブル名または列名として使用したために構文エラーが発生しました