반응형
반응형
--1. 일반적인 방법
UPDATE [TABLE_1]
   SET COL1 = SUB_COL1
     , COL2 = SUB_COL2
     , COL3 = SUB_COL3
 FROM
 (
     SELECT SUB_COL1
	      , SUB_COL2
		  , SUB_COL3
		  , USER_NUM
       FROM [TABLE_2]
      WHERE [조건...]
 ) SUB1
WHERE [TABLE_1].USER_NUM = SUB1.USER_NUM


--2. CTE 를 사용한 방법
WITH CTE_TABLE AS
(
    SELECT SUB_COL1, SUB_COL2, SUB_COL3, USER_NUM
      FROM [TABLE_2]
     WHERE [조건...]
)
UPDATE [TABLE_1]
   SET COL1 = SUB_COL1
     , COL2 = SUB_COL2
     , COL3 = SUB_COL3
  FROM CTE_TABLE SUB1
 WHERE [TABLE_1].USER_NUM = SUB1.USER_NUM
-- 1. 먼저 현재값과 update해야할 값을 조회해본다.
select a.컬럼1, b.컬럼1
        ,a.컬럼2, b.컬럼2
        ,a.컬럼3, b.컬럼3
        ,a.컬럼4, b.컬럼4
 FROM 테이블1 a inner join 테이블2 b on a.컬럼1 =b.컬럼2 and a.컬럼1_1=b.컬럼2_2
 where a.컬럼 = 조건


-- 2. ,을 =로 바꾸주고 바로 update 해준다.
update a set a.컬럼1 = b.컬럼1
                 ,a.컬럼2 = b.컬럼2
                 ,a.컬럼3 = b.컬럼3
                 ,a.컬럼4 = b.컬럼4
FROM 테이블1 a inner join 테이블2 b on a.컬럼1 =b.컬럼2 and a.컬럼1_1=b.컬럼2_2
where a.컬럼 = 조건
반응형

'프로그래밍 > DataBase' 카테고리의 다른 글

[MSSQL] 초를 시분초로 변환  (0) 2023.08.08
[MSSQL] PIVOT, UNPIVOT , 행과 열 변환  (0) 2023.08.04
[MS-SQL] Begin Tran  (0) 2023.07.19
[MSSQL] 랜덤 (무작위) Select  (0) 2023.07.18
[MSSQL] IF…ELSE IF…ELSE  (0) 2023.07.14
반응형

MS-SQL은 기본 설정이 AUTO_COMMIT으로 되어있습니다.

INSERT, UPDATE, DELETE 등 명령어를 사용할 때 COMMIT 명령어를 입력할 필요가 없습니다.

그렇기 때문에 UPDATE, DELETE 쿼리 수행 중 실수를 하게 된다면... 지옥을 경험할 수도 있습니다.. ㅠㅠ

 

예를 들어서 MEMBER라는 테이블이 있다고 가정하겠습니다. 멤버 테이블의 회원 삭제는 이력을 남기기 위해서 소프트 delete처리를 합니다. 이런일이 생기면 안되겠지만, 쿼리를 사용하여 회원을 삭제한다고 가정하겠습니다. 

UPDATE MEMBER
SET DELETED = 1
WHERE MEMBER_SEQ = 1;

 

위와 같이 정상적으로 작성하면 좋겠지만, 우리는 사람이라 가끔 실수를 하곤 합니다.

UPDATE MEMBER
SET DELETED = 1;
WHERE MEMBER_SEQ = 1;

뭐가 잘못됐는지 확인이 되시나요??

생각만해도 지옥문에 들어가기 전이네요...

쿼리는 진짜 아무리 숙련된 사람이라도 실수할 수 있기 때문에 조심해야 한다고 생각합니다.

 

이럴 때 MS-SQL에서는 BEGIN TRAN이라는 명령어를 제공합니다.

BEGIN TRAN
UPDATE MEMBER
SET DELETED = 1
WHERE MEMBER_SEQ = 1;

이렇게 사용하고

SELECT * FROM MEMBER
WHERE MEMBER_SEQ = 1;

 

위와 같이 검증 쿼리로 확인하여,

정상이라면 COMMIT TRAN; 으로  내용을 반영해주면 됩니다.

 

반대로 잘못 반영되었을 땐

ROLLBACK TRAN;으로 트렉젝션을 롤백하면 됩니다.

 

BEGIN TRAN을 사용하고는 꼭! COMMIT TRAN 이나 ROLLBACK TRAN을 사용해줘야 합니다.

만약 잊고, 사용하지 않았다면.. TRANSACTION이 계속 잡혀 있는 상태여서 DB가 정상 동작하지 않습니다. 

검증하는 시간도 그만큼 길면 안되겠지요.

반응형
반응형

Online Typing Practice for Programmers

https://www.speedcoder.net/

 

Typing Practice for Programmers | SpeedCoder

 

www.speedcoder.net

반응형
반응형

한컴 타자 연습

https://www.hancomtaja.com/

 

한컴타자 – 한글과컴퓨터의 한글 타자연습

손끝으로 전해지는 즐겁고 유익한 한컴타자의 타자연습과 게임을 즐겨보세요.

www.hancomtaja.com

반응형
반응형

‘그 일만 없었다면 사는 게 정말 행복했을텐데’라는 생각을 많이 했다.
살아가면서 겪은 장애물에 분개하곤 했다.
그러다가 어느 날 갑자기 삶 그 자체가 장애물이라는 사실을 깨달았다.
장애물이 없는 경로 따위는 삶에서 존재하지 않는다는 것을 알게 됐다.
그렇다면 우리의 역할은 무엇일까?
그렇다. 장애물을 받아들이는 실력을 향상시키는 것이다.
인생의 탁월한 답을 찾은 사람들의 공통점이다.
- 팀 페리스, ‘지금 하지 않으면 언제 하겠는가?’에서


‘인생이란 장애물 경기다. 처음 장애물을 뛰어 넘더라도
그 너머에는 더 높은 장애물이 또 기다리고 있다.
그리고 그것을 넘으면 더 어려운 장애물이 더 빨리 다가온다.’
마르틴 그레이의 말입니다.
성공하는 사람들은 다른 사람들이 장애물로 느끼는 것에서 기회를 봅니다.
발부리에 걸리는 모든 장애물을 디딤돌로 바꿉니다.
위험이 없다면 성장하지 못합니다.

반응형
반응형

모든 어른은
아이가 만나는 작은 지구다.
나보다 2~3배 큰 어른이 무릎을 꿇고
시선을 맞춰줬을 때, 존댓말로 인사를 건네줬을 때,
큰 손과 너른 품으로 안아줬을 때, 어떤 어른을
만나느냐, 어른에게 어떤 환대를 받느냐는
아이가 어떤 세상을 만나느냐와 같다.
어른이 돼보니 어린이였던 내가
얼마나 귀했는지 알 것 같다.


- 김혜민의 《지금보다 괜찮은 어른》 중에서 -


* 아이가 세상에 태어나
처음 만나는 어른은 당연히 부모입니다.
부모 밑에 자라면서 많은 '어른'들을 만나게 됩니다.
그 어른들로부터 어떤 대접을 받고 자랐느냐에 따라
아이의 삶이 바뀝니다. 아이들에게 던지는
질문 하나, 눈빛 하나에도 세심한 배려가
필요합니다. 깊은 사랑과 존중이
듬뿍 담겨 있어야 합니다.

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

자기 존엄  (0) 2023.07.21
흥미진진한 이야기  (0) 2023.07.20
영혼의 약속  (0) 2023.07.18
우주심(宇宙心)과 에고(Ego)  (0) 2023.07.17
첫사랑  (0) 2023.07.15

+ Recent posts