Эксперты, привет. Может ли оператор 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 в столбец ...»). В этом примере у меня могут быть значения для @ 1ID/@ 1Value, @ 2ID/@ 2Value и @ 3ID/@ 3Value, но не @ 4ID/@ 4Value. Поэтому я хочу, чтобы оператор слияния обрабатывал @ 4ID, чтобы он не выполнялся, если @ 4ID = NULL. Я надеялся, что смогу сделать что-то вроде этого:
--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 NOT NULL MERGE'? 'CASE' является частью выражений, а не выражением. –
Извините, я не был чист в этом вопросе. Я в основном имею в виду, что если @ 4ID равно null, то игнорируйте его. Выполняйте только те операторы слияния, где параметр не равен NULL. –