데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
다음의 칼럼이 있습니다.
칼럼
ID CONTENT1 CONTENT2 CONTENT3 USERID
1 'ABC' null null 'usre01'
2 'GE' 'EG' null 'user02'
인서트 할 때 CONTENT1 은 무조건 들어가고요
업데이트가 문제인데 @CONT 값을 받아 CONTENT2 값이 null 이면 CONTENT2 에 값을
CONTENT2 가 null 이 아니면 CONTENT3 에 값을 넣어주려고 합니다.
좋은 쿼리문 부탁드립니다.
상황에 따라 업데이트를 컬럼별로 날릴수도 있지만 이때는 각각 별도로 나눠서 업데이트를 날려야 할듯 하구요.
세개 컬럼에 한꺼번에 날리는 방식으로 할려면 select 문으로 먼저 조건에 따라 각 컬럼의 값이 변화를 시킨 다음 세개 모두를 업데이트로 날리는 방법이 가능 할듯 합니다. 방법은 case를 이용해서 하시는 방법이 가장 간단할듯 하네여.. 참고하세요...
이렇게도 가능 하다는 정도로.... ㅎㅎ 프로시저로 업데이트 상황을 체크 한다음 각각의 컬럼에 맞게 업데이트를 하시는걸 추천 합니다.
그게 나중에 수정이나 이해를 하는데도 명확합니다.
declare @ag_id int, @ag_CONTENT varchar(100)
set @ag_id = 2
set @ag_CONTENT ='CG' ;
with res
as (
select 1 id ,'ABC' CONTENT1 , null CONTENT2 , null CONTENT3 , 'usre01' USERID union all
select 2 id ,'GE' CONTENT1 , 'EG' CONTENT2 , null CONTENT3 , 'user02' USERID union all
select 3 id ,null CONTENT1 , null CONTENT2 , null CONTENT3 , 'usre01' USERID )
select id
, (case when CONTENT1 is null
then @ag_CONTENT
else CONTENT1
end) CONTENT1
, (case when CONTENT1 is not null
then
case when CONTENT2 is null
then @ag_CONTENT
else CONTENT2
end
else CONTENT2
end) CONTENT2
, (case when CONTENT2 is not null
then case when CONTENT3 is null
then @ag_CONTENT
else CONTENT3
end
else CONTENT3
end) CONTENT3
from res
where id = @ag_id