본문 바로가기
IT/MS SQL

MSSQL 개발시 유의 또는 참고 사항

by heavenLake 2022. 7. 21.
반응형

오라클로 개발하다 가끔 MSSQL을 개발하게 되면 당황스러운 경우가 생겨 몇가지 정리해둔다.

 

1. WITH(NOLOCK)

개발 프로젝트마다 다를수 있지만 , 내가 투입됐던 모든 프로젝트에서는

의무적으로 SELECT문에 무조건 WITH(NOLOCK)을 걸었다.

아마도 모든 프로젝트가 그러할거 같다.

사용법은 간단하다, SELECT시 그냥 테이블명 옆에 WITH(NOLOCK)을 명시해주면 된다.

자세한 설명은 밑에 참고.

https://heavenlake.tistory.com/128

 

MSSQL WITH(NOLOCK) , SELECT시 잠금무시

MSSQL 은 기본적으로 SELECT 시 공유잠금(S Lock) 이 걸린다. 이는 MSSQL 의 기본 격리수준(Isolation Level) 이 Read Committed 이기 때문이다. 즉, DML(INSERT, UPDATE, DELETE) 작업중인 ROW 또는 TABLE 에 S..

heavenlake.tistory.com

 

 

2.형변환

오라클에서 그런 경우를 잘 못봤는데??  MSSQL에서는 데이터간에 타입을 빡시기 검사한다.

SELECT시  사칙연산등에서 나오는 값들에 값이 오버플로우가 나거나, 각각에 구해지는 값이

형이안맞어(?? 이부분은 오래되서 확실치 않음) 오류가 나는 경우도 있다.

아무튼 엄청 오라클에 비해 형변환  문제를 많이 격게된다.

해결 방법은 CAST나, CONVERT를 사용하면 되고 또는 TRY_CONVERT(비추, 어쩔수 없을때만 사용)

를 사용하면 된다. 자세한 내용은 아래를 참고.

https://heavenlake.tistory.com/127

 

MSSQL 형변환 방법 CONVERT와 CAST

MSSQL에서 사용되는 데이터 타입 변환 함수는 CONVERT함수와 CAST함수입니다. 두 함수 다 하나의 유형에서 다른 유형으로 데이터를 변환하는 데 사용합니다. 쓰는 방식만 조금 다르고 하는 일은 같

heavenlake.tistory.com

https://heavenlake.tistory.com/129

 

MSSQL 형변환 오류 벗어나기 TRY_CONVERT

TRY_CONVERT : CONVERT 시에 나오는 모든 에러를 NULL로 처리하여 반환한다. 가끔 데이터 형변환을 하거나 타입별로 형변환을 처리하는데 기존 데이터가 해당하는 타입에 맞지 않는경우 에러를 뱉어

heavenlake.tistory.com

 

3. 임시테이블

MSSQL을 사용할때는 임시테이블을 참많이 사용했던것 같다.

인터페이스 할때 대용량처리시 유리했다, 커서사용하는 대신이녀석한테 넣어 놓고 처리하면 속도면에서 굉장히 빠름

(하지만 커서에 익숙한 운영자들은 가독성이 떨어진다는 이유로 이런 사용을 비추하기도  한다.)

오라클에도 임시테이블이 있는걸로 알고있지만, 오라클에서 사용해본적은 없고, 본적도 없음.!!??

어쨌든 적절히 사용하면 많은 도음이 됨 자세한 사용방법은 밑에 참고

https://heavenlake.tistory.com/132

 

MSSQL 임시테이블 # ##, 테이블변수 @ 차이와 사용방법

출처:[islove8587님의 블로그] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=islove8587&logNo=220608680181 [MSSQL] 임시 테이블 vs 테이블 변수 1. 임시 테이블 (1) 설명 - 임시 테이..

heavenlake.tistory.com

 

 

4. 컬럼이 Nullable이고 부정문을 쓸때  또는 조인시

조건문은 긍정문으로 작성하는게 국룰이지만 가끔은 부정문을 써야할때도 있다. 

그런데 문제는 해당 컬럼이 Nullable일때 그냥  where col != '값'

이렇게 해버리면 col의 값이 null인 row는 검색이 안된다.

굉장히 자주 일어날수 있는 오류다.

오라클에서는 이걸 해결하기 위해 존재하는 함수가 LNNVL이다.

하지만 MSSQL에는 이런 함수가 없다.

그래서 이걸 해결하려면 nvl로 col을 치환하거나, or문으로 is null까지 비교해야한다.

where (col != '값' or col is null)  <= 추천

또는

where nvl(col,'NoNe') != '값'    <= col 값이 예상범위에 있어 중복을 피할수 있거나,

                                                        size 값이 작아서 nvl 대체값을 크게 잡으면 되는경우 추천

 

또한

 

조인시에 보통은 키값을 조인하지만 가끔 그렇지 않은 경우에는 꼭 nullable확인후 

NVL(A.컬럼, 0) = NVL(B.컬럼, 0)

이런식으로 해줘야한다.

 

부정문이나 조인시 말고도 NULL인한 사칙연산, 문자열합치기, 비교연산등에 문제가 있으니

주의해야한다. 그리고 DB종류에 따라 약간 다른 내용도 있으니 항상 TEST후 개발을 추천한다.

 

 

 

반응형

댓글