pivot구문을 쓴 쿼리를 개발 DB에서 테스트 DB로 옮기던중 pivot구문이 안먹히는 상황이 발생했습니다.
검색을 해보니 호환성을 올려주면 된다고 그래서
select compatibility_level from sys.databases where name = 'DB네임'
이 쿼리로 호환성레벨을 확인하니 80으로 나와서 다음과 같이
exec sp_dbcmptlevel 'DB네임',90 으로 호환성레벨을 올려주었습니다.
그러니 pivot구문이 잘 동작하더군요.
근데 여기서 궁금한게 몇가지 생겼습니다.
현 상황이 제가 최종적으로 적용해야할 기존의 DB를 백업받아서 sql server express 2012에 올려놓고 테스트를 하는데
위와 같이 호환성레벨이 80이 나왔으면 거기서는 pivot이 안먹히는건가요?
또 위와 같이 호환성레벨을 80에서 90으로 올렷을 경우 기존의 실제 DB에서 생길만한 문제는 무엇이 있을까요?
두서 없이 질문드려서 죄송합니다. 읽어주셔서 감사합니다.
Comment 4
-
김동우(탱소연)
2014.05.15 10:00
호환성 레벨 80은 2012에 없습니다 90부터 있어요80이면 2012에 복원이안됩니다 중간에 2005~2008 R2 등 한번 거쳐서 하셔야해요80에서 상위버젼으로 바뀔때 제일 큰게 조인할떄 =*, *= 이거 쓰는거고.. 그외에는 upgrade advisor tool 돌려보면 어느정도는 확인됩니다..다른 솔루션이랑 돌아가는거면 테스트서버에 올려서 테스트는 필수로 하시는게좋아요... -
버즈베잇
2014.05.15 10:08
몇 가지 예외가 있지맊 테이블 힌트는 WITH 키워드를 사용하여 힌트를 지정할 때맊 FROM 젃에서 지원 됨
외부 조인 *= 및 =* 연산자가 지원되지 않으므로 OUTER JOIN 키워드를 사용해야 함
FOR XML에서 AUTO 모드의 파생 테이블 매핑은 불투명하게 처리
오류가 열 모호성에서 발생됨. SELECT 목록에 정의된 열로 바인딩할 때 ORDER BY에 지정된 열 접두사는 무시되지 않음
UINON의 결과 유형은 INSERT SELECT와 별개로 파생됩니다. UNION의 각 분기는 UNION의 결과 유형으로 캐스팅된 다음 INSERT의 대상 열 유형으로 캐스팅됩니다. UNION에 호홖되지 않은 유형이 있으면 첫 번째 캐스트에서 오류가 발생할 수 있음
뷰 또는 참조된 뷰에서 TOP 젃을 사용하는 경우 뷰를 통한 삽입 및 업데이터 작업은 WITH CHECK OPTION을 사용하는 뷰에서 지원되지 않음
FOR BROWSE 젃이 뷰에서 허용되지 않음
원격 데이터 원본 [OpenRowset 또는 OpenQuery]에 대한 통과 쿼리가 이름이 중복된 열을 생성하면 오류가 발생 함.
크기가 8000보다 큰 문자열 상수와 varbinary 상수는 varchar(max), nvarchar(max), varbinary(max) 유형으로 처리됨
CUBE 및 ROLLUP은 GROUP BY 젃에서 예약 키워드.
DATEPART와 같은 datetime 내장 함수에서 문자열 입력 값은 유효한 datetime 문자이어야 함. 유효하지 않은 datetime 문자를 사용하면 오류 241이 반홖됨.
--------------------------------
대충 이렇다고 합니다....
위 내용은 AD Consulting의 세미나 자료중의 한 부분 입니다.
-
철쑤
2014.05.15 10:41
그럼 2012express에 기존 DB 백업받은 것을 복원했을 때 해당 디비의 호환성 레벨이 80이면 기존의 DB가 2005 이하일 가능성이 높은건가요??
-
김동우(탱소연)
2014.05.15 11:00
2008 과 2008 R2 까지 80이 지원가능 하기 때문에 무조건 2005 이하라고 보기엔 어려울거같습니다확인해보니까 2005와 2008 R2 에서 80모드로 사용중인 DB를 2012에 복원하면 자동으로 2005인 90모드로 바뀌어서 올라오네요...