エキスパート、こんにちは。マージステートメントを実行する、または実行しない、caseステートメントを使用できますか?私はマージ機能が新しくなっています。次のように私の状況では、私は、ストアドプロシージャの中に、これらのパラメータに値を渡しています:マージステートメントを実行する前にcaseステートメントを使用できますか?
@1ID int = NULL
,@1Value float = NULL
,@2ID int = NULL
,@2Value float = NULL
,@3ID int = NULL
,@3Value float = NULL
,@4ID int = NULL
,@4Value float = NULL
AS
--1
MERGE FACT_CookReading AS T
USING
(
SELECT
@1ID
,@1Value
) AS S (
CookSampleId
,ReadingValue
) ON (
T.CookSampleID = S.CookSampleID
)
WHEN MATCHED THEN
UPDATE SET
ReadingValue = S.ReadingValue
WHEN NOT MATCHED THEN
INSERT (
CookSampleID
,ReadingValue
) VALUES (
@1ID
,@1Value
)
;
--2
MERGE FACT_CookReading AS T
USING
(
SELECT
@2ID
,@2Value
) AS S (
CookSampleId
,ReadingValue
) ON (
T.CookSampleID = S.CookSampleID
)
WHEN MATCHED THEN
UPDATE SET
ReadingValue = S.ReadingValue
WHEN NOT MATCHED THEN
INSERT (
CookSampleID
,ReadingValue
) VALUES (
@2ID
,@2Value
)
;
--3
MERGE FACT_CookReading AS T
USING
(
SELECT
@3ID
,@3Value
) AS S (
CookSampleId
,ReadingValue
) ON (
T.CookSampleID = S.CookSampleID
)
WHEN MATCHED THEN
UPDATE SET
ReadingValue = S.ReadingValue
WHEN NOT MATCHED THEN
INSERT (
CookSampleID
,ReadingValue
) VALUES (
@3ID
,@3Value
)
;
--4
MERGE FACT_CookReading AS T
USING
(
SELECT
@4ID
,@4Value
) AS S (
CookSampleId
,ReadingValue
) ON (
T.CookSampleID = S.CookSampleID
)
WHEN MATCHED THEN
UPDATE SET
ReadingValue = S.ReadingValue
WHEN NOT MATCHED THEN
INSERT (
CookSampleID
,ReadingValue
) VALUES (
@4ID
,@4Value
)
;
私はに実行している問題はで供給されているパラメータのいくつかのためにnull値があるかもしれないことである。この原因。ストアドプロシージャが失敗する( "NULLを列に挿入できません...")。この例を使用すると、@ 1ID/@ 1Value、@ 2ID/@ 2Value、@ 3ID/@ 3Valueの値を持つことができますが、@ 4ID/@ 4Valueはできません。ですから、@ 4IDがNULLの場合、@ 4IDを処理するマージステートメントを実行しないでください。
--4
CASE IF @4ID <> NULL THEN
MERGE FACT_CookReading AS T
USING
(
SELECT
@4ID
,@4Value
) AS S (
CookSampleId
,ReadingValue
) ON (
T.CookSampleID = S.CookSampleID
)
WHEN MATCHED THEN
UPDATE SET
ReadingValue = S.ReadingValue
WHEN NOT MATCHED THEN
INSERT (
CookSampleID
,ReadingValue
) VALUES (
@4ID
,@4Value
)
;
しかし、それはできないようです。おそらくこれを処理するより良い方法があります。私は熱心にあなたの提案を待っています。そして、あなたの時間をありがとう!
「IF @ 4ID IS NOT NULL MERGE」を意味しますか? 'CASE'は式の一部であり、文ではありません。 –
申し訳ありませんが、私はその点について明確ではありませんでした。私は基本的に、@ 4IDがnullの場合は無視します。パラメータがnullでない場合にのみ、これらのマージ文を実行します。 –