SQL Server データベースのレコードを更新するために使用されるストアド プロシージャがあります。
一致が見つかり、変数として null が指定された場合、データベース内の既存の値を使用したいと考えています。
多くの場合、部分的なデータしか利用できないため、レコードを完成させるために手順がいくつかの段階で実行されます。実行ごとに常にすべての変数があるとは限りません。
以下の CASE が機能しないのはなぜですか? null 値を指定すると、フィールド内の既存のデータが置き換えられます。
ALTER PROCEDURE [dbo].[sp_UPSERT_Test]
@ID int,
@Account_ID varchar(15)
@Name varchar(15)
AS
BEGIN
MERGE INTO dbo.Database_Log AS target
USING (
SELECT @ID, @Account_ID ,@Account_ID)
AS source (ID, Account_ID, Name)
ON target.ID = source.ID
WHEN MATCHED
THEN UPDATE
SET
Account_ID = CASE
WHEN source.Account_ID = NULL
THEN target.Account_ID
ELSE source.Account_ID
END
,Name = CASE
WHEN source.Name = NULL
THEN target.Name
ELSE source.Name
END)
WHEN NOT MATCHED
THEN INSERT (Account_ID, Name)
VALUES (Account_ID, Name);
RETURN
END