MSSQL INSERT 문 질문합니다..(MERGE) 0 3 2,650

by 너구링 [DB 기타] MSSQL [2015.08.12 17:47:35]


	<update id="SAVE_QQS" parameterType="Map">
		MERGE T_QQS AS A
		USING (SELECT #{MEM_NO} AS MEM_NO
		            , #{GROUP_NO} AS GROUP_NO
					, #{PASS_MONTH} AS PASS_MONTH
					, #{PASS_DAY} AS PASS_DAY
					, #{PASS_YN} AS PASS_YN
					, #{UNPASS_PRIVATE_CD} AS UNPASS_PRIVATE_CD
					, #{BIRTH_YEAR} AS BIRTH_YEAR
					, #{SEX} AS SEX
					, #{SPOINT_CD} AS SPOINT_CD
					, #{SPOINT_SIDO} AS SPOINT_SIDO
					, #{SPOINT_DONG} AS SPOINT_DONG
					, #{SPOINT_NM} AS SPOINT_NM
					, #{DEL_YN} AS DEL_YN
					, #{INS_PERSON_ID} AS INS_PERSON_ID
					, Convert(Varchar(10),GetDate(),112) AS INS_DATE
					, replace(Convert(Varchar(8),GetDate(),24),':','') AS INS_TIME) AS B
		   ON A.MEM_NO = B.MEM_NO AND A.GROUP_NO = B.GROUP_NO
		 WHEN NOT MATCHED THEN
			  INSERT(  MEM_NO
					 , GROUP_NO
					 , PASS_MONTH
					 , PASS_DAY
					 , PASS_YN
					 , UNPASS_PRIVATE_CD
					 , BIRTH_YEAR
					 , SEX
					 , SPOINT_CD
					 , SPOINT_SIDO
					 , SPOINT_DONG
					 , SPOINT_NM
					 , DEL_YN
					 , INS_PERSON_ID
					 , INS_DATE
					 , INS_TIME)
			 VALUES(   B.MEM_NO
					 , B.GROUP_NO
					 , B.PASS_MONTH
					 , B.PASS_DAY
					 , B.PASS_YN
					 , B.UNPASS_PRIVATE_CD
					 , B.BIRTH_YEAR
					 , B.SEX
					 , B.SPOINT_CD
					 , B.SPOINT_SIDO
					 , B.SPOINT_DONG
					 , B.SPOINT_NM
					 , B.DEL_YN
					 , B.INS_PERSON_ID
					 , B.INS_DATE
					 , B.INS_TIME)
		 WHEN MATCHED THEN
			  UPDATE
				 SET   A.PASS_MONTH			= B.PASS_MONTH
					 , A.PASS_DAY			= B.PASS_DAY
					 , A.PASS_YN			= B.PASS_YN
					 , A.UNPASS_PRIVATE_CD	= B.UNPASS_PRIVATE_CD
					 , A.BIRTH_YEAR			= B.BIRTH_YEAR
					 , A.SEX				= B.SEX
					 , A.SPOINT_CD			= B.SPOINT_CD
					 , A.SPOINT_SIDO		= B.SPOINT_SIDO
					 , A.SPOINT_DONG		= B.SPOINT_DONG	
					 , A.SPOINT_NM			= B.SPOINT_NM
					 , A.DEL_YN				= B.DEL_YN
					 , A.INS_PERSON_ID		= B.INS_PERSON_ID
					 , A.INS_DATE			= B.INS_DATE
					 , A.INS_TIME			= B.INS_TIME
		;
	</update>

이런 MSSQL   INSERT쿼리문이 있는데..  이걸 셀렉트 해주려면 어떻게 해줘야하나요?.....

또... 강제로 INSERT를 시켜주고 싶은데... 값을 강제로 넣어야 할 부분이 감이안오네요...

힌트라도 주시면 감사하겠습니다. 

by 아발란체 [2015.08.13 09:51:33]

MERGE문 ON절에 의해 비교를 해서

비교 값이

없으면 입력을 하고( WHEN NOT MATCHED THEN)

있으면 수정을 하는데( WHEN MATCHED THEN)

 

여기서 무엇을 셀렉트? 하고

여기서 무엇을 입력하고 싶다는 것인지

명확히 구분이 잘 되지 않습니다.


by 너구링 [2015.08.13 10:37:40]

답변 감사합니다~ 

대게는 selet * from 테이블 이런 명령어로 디비툴에서 값을 볼 수 있잖아요. 저 테이블에 어떤게 들어있는지 그런데 위와 같은 쿼리문도 그냥 단순히 select * from 테이블로 조회를 할수 있는건지ㅣ.. 가 궁금했습니다.  한테이블로 여러 작용을 하는 insert문같아서요.. 


by 이재현 [2015.08.18 16:16:52]

유싱 절에 한개의 로우 입니다. == SELECT 'A' AS C1, 'B' AS C2 FROM DUAL ( ORACLE )

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입