이전에 MSSQL에서 동적 쿼리를 사용해서 원하는 컬럼을 업데이트시켜 보았다. 이번에는 조금 다르게 내가 원하는 조건에 만족하는 데이터를 수정해 보도록 하겠다.
테스트 테이블은 이전 포스팅과 동일하게 할거라 이전 포스팅을 참고하자.
2024.08.12 - [데이터베이스/MSSQL] - [MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기
[MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기
나는 DB로 mysql을 주로 사용하면서 공부했었는데, 이번에 일하면서 ASP.NET으로 구축된 웹 프로그램 DB가 MS-SQL을 사용하면서 mysql보다는 mssql에 더 익숙해져 갔다. 특히 프로시저를 많이 다뤘는데 프
goddmk.tistory.com
1. 기존 Update 구문
먼저 테이블의 데이터를 바꾸려면 다음과 같이 update문을 사용하여 update 시킬 수 있다. 테이블은 이전 포스팅에서 사용했던 TEST 테이블을 사용하겠다.
1-1. 하나의 값만 수정
만약 ITEM3의 모든 값을 25로 수정하려고 한다면 아래와 같이 입력하면 된다.
--ITEM3의 컬럼에 있는 값을 25로 바꾼다.
UPDATE TEST SET ITEM3 = 25
1-2. 여러개의 값 수정
그러면 ITEM2의 값은 30으로 ITEM3의 값을 25로 수정하려고 하면 이렇게 입력한다.
UPDATE TEST SET ITEM2 = 30, ITEM3 = 25
1-3. 조건에 따른 값 수정
그리고 ID가 1번인 경우 ITEM1의 값을 40으로 바꾸려면 where 조건절을 붙여 사용하면 된다.
UPDATE TEST SET ITEM1 = 40 WHERE ID = '1'
그렇지만 여기서 ID가 1인 경우에는 ITEM1에 20을 주고 싶고, ID가 2인 경우에는 ITEM1에 35를 주고 싶다면 즉 ITEM1에 ID에 따라서 값을 업데이트하고 싶다면 아래처럼 UPDATE문을 2번 적어서 써야 한다.
UPDATE TEST SET ITEM1 = 20 WHERE ID = '1'
UPDATE TEST SET ITEM1 = 35 WHERE ID = '2'
2. CASE 문을 통한 수정
2-1. CASE 문을 활용한 조건 수정
그래서 위에 표현식처럼 UPDATE를 2번 중복사용하지 않기 위해서 CASE문을 사용하여 조건을 나누어 한 줄로 작성할 수 있다.
UPDATE TEST SET ITEM1 = CASE WHEN ID = '1' THEN 20 WHEN ID = '2' THEN 35 END
그런데... 이상하게 UPDATE를 하니 나머지 값들은 NULL로 나오는 것이었다. 내가 원하는 건 ID가 1,2인 경우만 UPDATE 시키는 것인데, 나머지 부분들은 NULL로 UPDATE 되면 안 되고 기존 값 그대로 나와야 한다.
그래서 생각해 보니 이렇게 쓴다면 ID가 1,2인 값만 입력하고 나머지 값은 아무 조건에 해당하지 않아 값이 없는 걸로 인식하기 때문에 NULL로 UPDATE 시켜버리는 것이다...
그래서 CASE 문에 ELSE라는 구문을 추가해주어야 한다.
아까 테이블을 원상복귀시키고 다시 아래의 명령어를 입력해 주면 정상적으로 UPDATE 된 것이 보인다.
UPDATE TEST SET ITEM1 = CASE WHEN ID = '1' THEN 20 WHEN ID = '2' THEN 35 ELSE ITEM1 END
2-2. 조건과 나머지 부분에 대한 수정
만약 1,2에 각각 다른 값을 입력하고 ELSE부분에 나머지에 대한 공통된 값을 입력한다면 아래의 명령어를 입력하면 된다.
UPDATE TEST SET ITEM1 = CASE WHEN ID = '1' THEN 20 WHEN ID = '2' THEN 35 ELSE 40 END
'데이터베이스 > MSSQL' 카테고리의 다른 글
[MSSQL] UNION 다루기 (0) | 2024.09.19 |
---|---|
[MSSQL] PIVOT을 사용하여 행값을 컬럼으로 바꾸기 (0) | 2024.09.01 |
[MSSQL] CASE문 다루기 (0) | 2024.08.30 |
[MSSQL] 데이터베이스 백업/복원하기 & 복원 에러 해결 (0) | 2024.08.20 |
[MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기 (2) | 2024.08.12 |