다들 아시겠지만, MS-SQL의 좋은것중 하나가 쿼리를 모아서 한번에 보낼수 있는거더군요.(오라클은 되긴하는데 좀 복잡하다고...)
1.저같은 경우는 insert, update등을 동시에 여러개를 해야 하고 트랜잭션이 필요한 경우, 쿼리문을 만들어 놓고 쿼리문을 다 만들면, 비로소 트랜잭션을 걸고 한번에 서버에 날린 다음 이상이 없으면 커밋을 합니다.
그러면 쭉.. 실행이 되죠. 그게 하나씩 보내는거보다 훨씬 속도가 빠르더군요.
그런데..
어떻게 세팅을 해야 그렇게 되는지 모르겠는데, 예를 들어 50개의 insert구문을 만들어서 던지는 프로그램이 있습니다.
만약 중간에 정상적이지 않은 쿼리가 있는 경우, 거래처중 어떤 서버는 에러를 내고 돌려줍니다.
그런데 어떤 서버는 에러가 나긴 하지만 그냥 무시하고 에러난 쿼리만 버리고(?) 나머지를 정상처리 해버립니다.
얼마전 거래처에서 특정한 한줄이 저장이 안되서 컴플레인을 받았는데, 이유는 필드의 길이가 저장하려는 길이보다 작아서 발생하는 에러였습니다.
하지만 이런 경우 에러를 내는 서버도 있고 이렇게 그냥 무시하고 가는 서버도 있네요,
똑같은 쿼리가 똑같은 프로그램에서 돌았는데 서로 상황이 다르다면 결국 서버 세팅에 뭔가 차이가 있는거 같습니다.
어떤 옵션이 그렇게 할까요?? 고견을 들려주셨으면 합니다.
2. 또한, 아까 얘기한 컴플레인도 사실 좀 그렇습니다. 예를 들어 CHAR(10)짜리 필드에 11자리를 밀어넣으면 어떤 서버는 그냥 10자리만 저장하고 나머지를 버리고, 어떤 서버는 안맞으니까 에러를 내버리네요.(설마 CHAR과 VARCHAR의 차이는 아니겠지요..?)
결국 둘다 뭔가 옵션이 있지 않을까 해서요..
고맙습니다.
Comment 1
-
처리짱
2015.09.16 19:33
SET XACT_ABORT ON 을하시면 처리도중 에러가 나면 모두 롤백이 되고
SET XACT_ABORT OFF를 에러구문을 띄어넘고 계속 진행됩니다..
저도 안써봐서 자세한거는 검색을 ㅠㅠ
근데 쿼리를 모아서 보낼수 있다는게 무슨 말씀인신지요?
CHAR(10)짜리에 11자를 넣으면 에러 납니다.. 안나는경우를 저는 못본거 같은데요..