100건당 update 실행 0 6 2,707

by 스캇 [SQLServer] [2018.08.20 11:30:56]


안녕하세요.

mssql 에서 data 업데이트 할게 많은데 10000건 한꺼번에 하니까 에러가 나서

200건씩 update 하고 commit 하고 하려고 하는데 일일이 문장에 commit 넣어주려니 힘들어서 그러는데 for 문이 쉬인 방법이 없을까요?

begin tran

 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002334' AND ROUT_SEQ = '030'
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002335' AND ROUT_SEQ = '030'

commit
begin tran
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002336' AND ROUT_SEQ = '030'
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002338' AND ROUT_SEQ = '030'
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002334' AND ROUT_SEQ = '030'
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002335' AND ROUT_SEQ = '030'

commit
begin tran
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002336' AND ROUT_SEQ = '030'
 UPDATE PCA020T SET WK_SHOP_TYPE = '5' WHERE org_cd = '01' and WK_ORD_NO ='MK1002338' AND ROUT_SEQ = '030'

commit

by 우리집아찌 [2018.08.20 13:56:51]

WK_ORD_NO 값만 바꾸면서 WK_SHOP_TYPE = 5로 UPDATE 하시네요.

10000건 정도이면 UPDATE 문 하나로 해도 됩니다.

운영중이시면 새벽이나 야간에 작업하세요.

느리시면 WHERE 절의 컬럼에 INDEX가 없어서 그럴수 있습니다.

확인해보세요.


by jkson [2018.08.20 16:54:47]

update top 문을 사용하면 될듯합니다.

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/988b9a62-54f7-478f-a057-cfcce54c1b14/update-every-n-rows-in-sql-server-2008?forum=transactsql


by 우리집아찌 [2018.08.20 17:03:17]

요거 재밌네.. UPDATE가 할게 없으면 빠져나오고 안그러면 UPDATE..

근데 조건은 추가해야겠네..


by jkson [2018.08.20 18:27:08]

오라클에서도 rownum으로 업데이트하고 싶은만큼 하고 commit하고 for문 돌리는 형태로 해봤는데

확실히 bulk update가 빠르더라구요. mssql은 bulk update가 없나봐요.


by 우리집아찌 [2018.08.21 09:46:54]

MS-SQL 도 BULK INSERT가 있는데 의미가 틀려.. SQL LOADER 같아.

https://docs.microsoft.com/ko-kr/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017


by 마농 [2018.08.20 18:28:35]

루프 안에서 1개의 update 구문을 변수값만 바꿔가며 1만번 실행하는 것이라면?
cnt 변수에 값을 1씩 증가시켜가며 IF 문으로 제어가 가능하겠지만.
그냥 단순 update 문장 1만개가 나열된거라면? 방법이 없지 않나요?
update 문장 1만개를 어떻게 만들어 낸건가요?
update 문장을 만드는 과정을 개선해야 할 듯 하네요.

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