SQL Server 2000データベースがあります。次のカーソルを実行して個々のレコードのトリガーを起動する必要があります(トリガーは一度に1つのレコードでのみ動作します)。SQL Server 2000カーソルで問題が発生しましたNEXT
DECLARE @REC as bigint
DECLARE coil1_cursor CURSOR FOR
SELECT Rec# FROM coil1 WHERE Timestamp BETWEEN '2011-05-10 06:00:00' AND '2011-05-10 07:00:00'
OPEN coil1_cursor
FETCH NEXT FROM coil1_cursor INTO @REC
WHILE (@@FETCH_STATUS=0)
BEGIN
Print @Rec
UPDATE coil1 SET ShiftLength=Null WHERE Rec#[email protected]
FETCH NEXT FROM coil1_cursor INTO @REC
END
CLOSE coil1_cursor
DEALLOCATE coil1_cursor
私がUPDATE行をコメントアウトすると、Rec#フィールドからシーケンシャル番号が期待どおりに取得されます。 UPDATE行のコメントを外すと、バッチは無限ループに入ります。バッチを停止すると、取得した最初のレコードの更新のみが表示されます。これはFETCH NEXTのようなものです。なぜどんなアイデア?
一度に1つのレコードでしか動作しないトリガーを書き換える必要があります。 –
"FROM inserted"のすべてのレコードで操作できるようにトリガーを修正できますか?もしそうなら、単にUPDATE coil1を使用してください。SET ShiftLength = Null WHERE [Timestamp] BETWEEN '2011-05-10 06:00:00' AND '2011-05-10 07:00:00'。私はあなたが手元の問題に間違った解決策を実装しようとしていると思います。 – HardCode
トリガーで一度カーソルを削除したところ、40,000レコードしか挿入できなかったのは45分以上から1分未満でした。トリガ内でカーソルを使用することは非常に貧しい方法です。 – HLGEM