0

もともと単純な3行の更新が含まれていたOLEDBコマンドがあります。

raw_CommissionPaid set PolicyNumber =を更新しますか?ここで、PolicyNumber =?

これは問題なく機能し、期待どおりに機能し、すべてが良好でした。

最近、これはうまくいかず、多くの損害を与える可能性があると判断したので、すべてをトランザクションに入れ、影響を受ける行を監視し、予想よりも変更された場合はロールバックすることにしました。これに対する私の更新:

BEGIN TRY BEGIN TRAN UpdateCommissionsPaidPolNo

raw_CommissionPaid set PolicyNumber =を更新しますか?ここで、PolicyNumber =?

IF @@ ROWCOUNT <> 1 RAISERROR('行数<>1'、11、1)

COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN UpdateCommissionsPaidPolNo

  PRINT 'UpdateCommissionsPaidPolicyNumber script failed'

  SELECT
        ERROR_MESSAGE() as ErrorMessage            END CATCH

ただし、これにより、通常表示される「構文エラーまたは一般的なエラー」メッセージが表示されました。以前の問題で、パラメーターが他のSQLに埋め込まれている場合、パラメーターを?にマップできないことがあることを思い出しました。これが問題である可能性があると考えたため、念のためにこれに変更しました。

@FNumber varchar(20)を宣言します@LNumber varchar(20)を宣言します

@FNumber =?@LNumber =?を設定します

BEGIN TRY BEGIN TRAN UpdateCommissionsPaidPolNo

raw_CommissionPaid set PolicyNumber = @FNumberを更新します。ここで、PolicyNumber = @LNumber

IF @@ ROWCOUNT <> 1 RAISERROR('行数<>1'、11、1)

COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN UpdateCommissionsPaidPolNo

  PRINT 'UpdateCommissionsPaidPolicyNumber script failed'

  SELECT
        ERROR_MESSAGE() as ErrorMessage            END CATCH

しかし、これから私はまだ得ます:

構文エラー、権限違反、またはその他の非特定のエラー

印刷またはエラーメッセージが返されたことが原因である可能性があることに気付きましたが、それらを削除しても何も変わりません。それでも失敗します。

SQL Server Management Studioでテストしたので、SQLが有効であることを確認してください。

誰もがこれに直面しましたか?この種の変更を可能にするために変更することになっている設定はありますか?

前もって感謝します

4

1 に答える 1

0

このサイトを読んだ後、データフロータスクのTransactionOptionプロパティをsupportedに設定すると、失敗した場合、失敗したセクション自体がロールバックされることを学びました。

この知識を身につけて、私が理解したのは、更新されている複数の行がエラーとしてカウントされることを認識させることだけでした。したがって、これに変更します。

raw_CommissionPaid set PolicyNumber =を更新しますか?ここで、PolicyNumber =?

IF @@ ROWCOUNT <> 1 RAISERROR('行数<>1'、11、1)

それ自体をロールバックさせる必要があります。

于 2013-02-07T10:48:29.437 に答える