1
SQL Server 데이터베이스의 레코드를 업데이트하는 데 사용되는 저장 프로 시저가 있습니다.Merge의 선택적 매개 변수
일치하는 항목이 있고 변수가 null 인 경우 데이터베이스에서 기존 값을 사용하고 싶습니다.
흔히 부분 데이터 만 사용할 수 있으므로 절차를 여러 단계에서 실행하여 레코드를 완료하십시오. 각 실행마다 항상 모든 변수가있는 것은 아닙니다.
왜 아래의 경우 작동하지 않습니까? 널 (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
사이드 참고 : 해야 사용
IS NULL
이 시도 -
NULL
은 하지는 항등 연산자와 비교할 수있는 값입니다 ** 저장 프로 시저에 대한 접두어'sp_'를 사용하지 않습니다. Microsoft는 [자체 저장을 위해이 접두어를 예약했습니다 (* 저장 프로 시저 명명 * 참조)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx) 및 당신은 미래에 언젠가 이름 충돌의 위험을 감수해야합니다. [또한 저장 프로 시저 성능에 좋지 않습니다.] (http://sqlserverpedia.com/blog/sql-server-bloggers/stored-procedure-performance-using-%E2%80%9Csp_%E2%80%9D-prefix- % E2 % 80 % 93-myth-or-fact /). 'sp_'를 피하고 다른 것을 접두어로 사용하는 것이 가장 좋습니다. –마크, 감사드립니다. – madlan