7

最後のステップでテーブルを削除する必要があるかどうかを判断できるように、いくつかのアクションをトランザクションにラップしようとしています。これが私がこれまでに持っているものです:

    --select the DB
    use DB1


    --if the table exists, we want to delete it first
    IF (EXISTS (SELECT * 
                     FROM INFORMATION_SCHEMA.TABLES 
                     WHERE TABLE_SCHEMA = 'dbo' 
                     AND  TABLE_NAME = 'VV'))
    BEGIN
        drop table dbo.VV
    END

BEGIN TRAN  

    SELECT field1
          ,field2
          ,field3

    INTO dbo.vv
      FROM vvr A
     WHERE A.field1 <> 'GEN'
     AND A.field2 <> 'NO DATA'
     AND A.field3 <> '(BLANK) NO'

PRINT 'ROW1:' +  CAST(@@ROWCOUNT as varchar(11))
IF @@ROWCOUNT = 0 
        ROLLBACK TRAN 
    ELSE
        COMMIT TRAN


    UPDATE dbo.vv 
    SET dbo.field1 = vvr.field1
    FROM dbo.vv

PRINT 'ROW2:' +  CAST(@@ROWCOUNT as varchar(11))

IF @@ROWCOUNT = 0 
        ROLLBACK TRAN 
    ELSE
        COMMIT TRAN

トランザクションステートメントなしでこれを実行すると、問題なく実行されるため、SQL が機能することはわかっていますが、トランザクションステートメントを追加すると、テーブル VV が存在しないと通知されて失敗します。VVで選択すると、間違いなく消えます。

上記が正常に実行されるようになったら、テーブル vvr を削除するステートメントを最後にもう 1 つ追加しますが、まだそこまで行っていません。

4

3 に答える 3

0

そこにある PRINT ステートメントは開発用です。これが完全に機能したら、削除する予定です。そのため、それらを取り出したところ、SELECT INTO ステートメントと UPDATE ステートメントは正常に機能しましたが、DROP ステートメントはどれも機能しませんでした。

コードの先頭にある DROP table ステートメントと、追加したステートメントは次のとおりです。

IF @@ROWCOUNT > 0 
BEGIN
    drop table dbo.VVR
END

IF @@ROWCOUNT > 0 COMMIT TRAN

一番上で DROP TABLE ステートメントを実行してから手順全体を実行すると、エラーは発生せず、期待どおりにテーブルを更新して停止します。

于 2013-08-23T14:17:28.713 に答える