SQL に次のカーソルがあります。
DECLARE @Script varchar(max)
DECLARE @getScript CURSOR
SET @getScript = CURSOR FOR
SELECT [Script]
FROM ScriptTable
OPEN @getScript
FETCH NEXT
FROM @getScript INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
EXEC(@Script) --Working part. This executes the query stored in the Script column.
--For example INSERT INTO zTest VALUES(VAL1, VAL2, etc etc..)
UPDATE ScriptTable
SET DateDone = GETDATE(), IsDone = 1, Err = NULL
FETCH NEXT
FROM @getScript INTO @Script
END TRY
BEGIN CATCH
DECLARE @Err varchar(max)
SET @Err = ERROR_MESSAGE()
UPDATE ScriptTable
SET DateDone = GETDATE(), Err = @Err
END CATCH
END
CLOSE @getScript
DEALLOCATE @getScript
Q1: 現在、EXEC(@Script) を実行すると、コメントで指定された「zTest」テーブルに挿入された値を取得しています。
ただし、「Update ScriptTable」がある 2 番目の部分は、スクリプト テーブルのすべての行を更新します。カーソルが移動する適切な行の ID を指定する必要があることはわかっています。質問は、どうすればそれを行うことができますか? 適切な行を更新するだけではなく、次の行に移動してからその行を更新します。
Q2: 次の質問は、CATCH ブロックで、ScriptTable のスクリプト列のクエリの 1 つにエラーが発生するとすぐに無限ループを作成していると思います。結果を見ると、そのまま続行されます。そして行きます。ブレイクしたくありません。Err 列にエラーを書き込み、@Script の最後に到達するまで次の行を続行し、停止するための手順。
Scripts テーブルに何も挿入していないため、IDENT_CURRENT、Scope_Identity などは機能しません。
助けてください。