2

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
4

1 に答える 1

1

多分あなたが適切にチェックしていないからですNULLか?等値演算子と比較できる値ではありません - 使用するNULL必要ありますIS NULL

これを試して:

 SET      
    Account_ID = CASE 
                    WHEN source.Account_ID IS NULL 
                    THEN target.Account_ID 
                    ELSE source.Account_ID 
                 END

IS NULLの代わりに使用= NULL

于 2013-02-17T10:04:50.413 に答える