최근에 테이블에 대한 몇 가지 변수 업데이트를 수행해야했지만 병합 성명을 알고 있지만 (이 모든 것을 따라 잡을 필요가 있음에도 불구하고) 다음 문장을 수행하여 선택적으로 테이블을 업데이트하고 이것이 "좋은 생각"인지 또는 내가 알지 못하는 숨겨진 결과가 있는지 확인하고 싶습니다.case 문을 기반으로하는 열의 SQL 부분 업데이트?
제 경우에는 기본 키를 테이블에 전달하지만, 전달 된 매개 변수가 null인지 여부에 따라 열을 업데이트합니다. 강제 업데이트 (상태 등)를 확실히해야하는 경우 분명히.) 다음은이 유형의 구조 .. 그냥 위의 몇 가지 생각 후
create procedure sp_myprocedure
as
@id bigint,
@field1 int = null,
@field2 varchar(255) = null,
@field3 char(1) = null
begin
update my_table
set
field1 = case when @field1 is not null then @field1 else field1 end,
field2 = case when @field2 is not null then @field2 else field2 end,
field3 = case when @field3 is not null then @field3 else field3 end,
where
id = @id
end
또는 시나리오의 MERGE 문을 추구하는 것이 가장 좋습니다 "/ THEN이 경우"복수를 가진 저장하는 것입니다 .. 열을 업데이트 위처럼? 사전에
많은 감사,
건배, 대안을 가져 주셔서 감사합니다. 그래서 합병은보다 효율적으로 보일까요? 또는 합체 기능이 더 "표준"입니까? 나는 양쪽 모두 이해의 관점에서 꽤 잘 읽었다 고 생각하지만 위의 방법 중 하나가 가능하다면 더 스탠드/퍼포먼스인지 여부를 알고 싶었습니까? –
옵션 2는 필요가 없으면 update 문을 실행하지 않기 때문에 미리 설정되어 있습니다. –
@onedaywhen, 조건부 업데이트 기능이 함께 제공됩니까?Merge는이 유스 케이스에서 UPDATE에 비해 어떤 종류의 이점 (기능/성능/구문)을 가지고 있습니까? 아니, 아니. –