以下のコードを参照してください。 パーツ#1と#2を別々に実行すると、それらは計画どおりに動作します。[InsertFlag]フィールドに「Y」という値が表示されます。小分けで実行すると2部のストアドプロシージャが成功し、一度に実行すると失敗します
しかし、sp全体を実行してそれらを一緒に実行すると、予想される 'Y'値が得られません。
私はこれらの2つのステートメントを置く順序に関係なく、#2が最初に実行されることを推測します。これは[SCD_Type2_EndDate]に値を設定し、#1がNULLのフィールドをテストすると失敗し、[InsertFlag]フィールドは更新されません。
私の推測が正しい場合、これらの2つのステートメントを強制的に実行する方法を見つける必要があります。最初のステートメントの後に「GO」を追加しようとしましたが、次のエラーが表示されます。
Msg 102, Level 15, State 1, Procedure etl_Update_SetExpiryDate_adName, Line 19 Incorrect syntax near ';'. Msg 102, Level 15, State 1, Line 23 Incorrect syntax near 'END'.
どうすればこの問題を解決できますか?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE etl_Update_SetExpiryDate_adName
AS
BEGIN
SET NOCOUNT ON;
--1.
UPDATE
amlrr.wtName
SET
InsertFlag = 'Y'
FROM
amlrr.wtName wtN
INNER JOIN amlrr.adName adN
ON wtN.StageID = adN.StageID
WHERE
adN.SCD_Type2_EndDate IS NULL
AND
wtN.FullName <> adN.FullName
GO
--2.
UPDATE
amlrr.adName
SET
SCD_Type2_EndDate = getdate()
FROM
amlrr.adName adN
INNER JOIN amlrr.wtName wtN
ON adN.StageID = wtN.StageID
WHERE
adN.SCD_Type2_EndDate IS NULL
AND
adN.FullName <> wtN.FullName
END
GO
ガイドラインに従ってコードをフォーマットしてください。このように読むのは不可能です。 –
私は同意します。私はそれが魔法のように自分自身をフォーマットするだろうと思った。私は次の投稿の前にそれを行う方法をお読みになるでしょう。 – fieldingmellish
偽のアラーム、私はばかです。私は誤ってこのspのコピーをdboスキーマに作成し、amlrrスキーマでこのspを実行してテストしていました。 – fieldingmellish