[SQL]MS SQL 2000에서 2008로 업그레이드 체크할 사항(쿼리문)

SQL 2000=>2008 달라진점이 여러가지 있습니다만
그중에 쿼리문 관련하여 다음과 같은 사항은 체크해보는게 좋을 듯합니다.

1. Order by 절은 display 되는 필드명을 명시해야 합니다.
아래 구문은 SQL 2000에서는 허용이 되었습니다.
Data2+data3이 data1로 표시됩니다.

select Data1=data2+data3
from table1
order by data2

그런데, SQL 2008에서는 order by 에러가 발생합니다.
아래와 같이 수정을 하면 에러가 발생하지 않습니다.

select Data1=data2+data3
from table1
order by Data1

즉, display 되는 필드를 적어야 합니다.
또한 아래와 같이 동일한 필드를 표시하는데 order by에 동일한 필드인 field1을 넣으면 애매한 필드라고 에러를 발생합니다.
Display 필드명을 다르게 주고 order by를 하는게 좋습니다.
Select field1,field1,field2
From table1
Order by field1

수정)
Select Field_name=field1,field1,field2
From table1
Order by Field_name
2. *=, =* 와 같은 구문은 허용하지 않습니다.
2000버전에서는 left outer join, right outer join형태로 사용이 되었으나
데이터 표기시 Nullable 한 데이터에 대해서 제대로 표기 못하는 오류가 있어
Left outer join을 쓰도록 하고 있습니다.

SQL2000에서는 허용이 되었으나 이후 버전에서는 left outer join을 사용해야 합니다.

3. temp table 생성시 길이가 0인 필드는 생성이 안됩니다.
아래 구문과 같이 공란('')에 대해서 테이블 생성시 에러가 발생합니다.
Select '' Into #temp From table1
최소한 1자리 이상의 공간을 확보해야 합니다.
Select convert(varchar(01),'') into #temp from table1
위와 같이 수정을 해야 에러가 발생하지 않습니다.

4. 다음으로는 with 구문입니다.
인덱스나 nolock을 사용시 테이블 옆에 인덱스 명을 넣는데 보통 with 를 빼는 경우가 많으나
2000 이후부터는 with문을 반드시 입력해야 합니다.
Select * from table1 (index=table1_index) <== 에러 발생
Select * from table1 with (index=table1_index nolock) <== with 문을 사용해야 함. Nolock만 사용하는 경우도 with가 있어야 합니다.

그밖에도 몇가지 있는데 다음 포스트에 다시 올릴께요.

댓글

이 블로그의 인기 게시물

dtsrun 실행하기

[MS SQL] SP수행 시간 및 작업빈도 확인

Slug가 뭘까?