EXEを使用して、あるセットのテーブルから別のセットにデータを移動するためにストアドプロシージャを1時間に2回呼び出すと同時に、別のテーブルのカウントを更新してストアドプロシージャが実行された。 EXEはストアドプロシージャを特定の番号で呼び出して、ストアドプロシージャにどのインサートを実行するかを指示します。したがって、この手順を二回実行される毎時間、:ストアドプロシージャ更新ステートメントをスキップする
If @intUploadNumber = 1
INSERT INTO Prod1
SELECT *
FROM Staging1
UPDATE tbl_Count
SET UpdateCount = UpdateCount + 1
WHERE Date = CAST(GETDATE() AS DATE)
If @intUploadNumber = 2
INSERT INTO Prod2
SELET *
FROM Staging2
UPDATE tbl_Count
SET UpdateCount = UpdateCount + 1
WHERE Date = CAST(GETDATE() AS DATE)
EXEは基本的でプロシージャを呼び出す:ストアドプロシージャの下部に
exec STRPRC 1
exec STRPRC 2
は次のとおりです。
IF ((select updatecount from tbl_Count WHERE Date = CAST(GETDATE() AS DATE)) % 2 = 0)
BEGIN
INSERT INTO Prod3
SELECT *
FROM PROD1
LEFT JOIN PROD2 ON PROD1.CID = PROD2.CID
END
しかし、私は自分のコードに気づいています。たとえexec(s)が正しく呼び出されていて、ステージングからのすべてが実動に入っても、ストアドプロシージャはeではなく最後のif文を渡すことがよくあります私の最後の挿入物を放つ。
これが起こることを許可するMS SQLの問題を知っている人はいますか?たぶん、ストアドプロシージャの呼び出し時に、updatecountが最後のif文に当たるまでに正しく設定されていないためです。私はまた、TRY ...キャッチSQLを囲んで、私のすべてのエラーを別のテーブルにダンプする必要がありますが、それは空のままです。詳細が必要な場合は、私にお知らせください。 (いいえ、私は別に、彼らは個別に呼び出される必要があり、最初の挿入の両方を呼び出す離れEXEから移動することはできません。)
を実行するための唯一のステートメントを持っている場合でも、BEGIN/ENDブロックの区切り文字を使用することを好むが、「誰もこれが起こることを可能とするMS SQLの問題を知っていますか?」*はいそれはあなたがそれを伝えるものです。ブレークポイントを設定するか、いくつかのロギングや何かを入れることをお勧めします。 'select updatecount from tbl_Count WHERE Date = CAST(GETDATE()AS DATE))%2 = 0'によって返される値は、です。 –
実際にコードをコピー&ペーストしましたか? B/c SELETの明らかなタイプミス – peterG
ここに詳細を記入する必要があります。おそらくあなたは空のキャッチで試してみると、この全体が走っていますか?挿入物を明示的に習得する必要があります。すべての列に名前を付け、select *をソースとして使用する必要はありません。 –