2012-05-21 5 views
0

SQL Server 2008에서 SQL Server 2012 Express로 응용 프로그램을 옮길 때 모두 정상이지만 여러 저장 프로 시저에서 구문 오류가 발생한다고 말합니다. 온라인으로 보았지만 답변을 찾지 못했습니다. SQL Server 2008 (Standard)에서는 지원되지만 SQL Server 2012 Express에서는 지원되지 않는 구문 유형이 있습니까?SQL Server 2008에서 SQL Server 2012 Express로 이동

+7

나는 생각할 수 없다. 어쩌면 예제와 ACTUAL 오류 메시지를 보여줄 수 있습니다. 여기 몇몇 영리한 사람들이 있지만, 마음 읽는 사람은 거의 없습니다. –

+1

죄송합니다. 막연하지만 오류는 모든 곳에서 발생합니다. 일부 구문, 일부는 객체가 존재하지 않는다는 것을 말합니다. 이전에는 MS 제품을 사용하지 못했지만 perl4에서 perl5로, 또는 php4에서 php5로 이동하는 것과 같을 수 있다고 생각했습니다. 거기 밖으로 안내. 나는 그 사실을 알지 못하고 하나도 찾지 못했지만 그 답이 될 수있는 것으로 의심됩니다. 실제 오류 메시지를 추가하겠습니다. 감사. – zortacon

답변

5
내가 2008 년 2000 호환성 모드를 사용하고, 당신의 저장 프로 시저가 이전 스타일의 외부 조인 한 경우 일 가능성이있을 것 같다

:

SELECT o.name, c.name 
FROM sys.objects AS o, sys.columns AS c 
WHERE o.[object_id] *= c.[object_id]; 

이 구문은 SQL Server 2000에서 작동하지만,있다 그 후 사용되지 않습니다. 2005, 2008 및 2008 R2에서는 80 호환 모드를 사용하면 구두 수 있습니다.

메시지 102, 수준 15, 상태 1, 줄 3
근처의 구문이 잘못되었습니다 '* =': 위의 코드와 함께 실패 할 수 있도록 SQL 서버 2012, 당신은 더 이상, 80의 compat 모드를 사용할 수 없습니다.

2008 년 대신이 오류 메시지를받을 것이다 :

메시지 4147, 수준 15, 상태 1, 줄 3
쿼리는 사업자 ("*=" or "=*")에 가입 비 ANSI 외부를 사용합니다. 이 쿼리를 수정하지 않고 실행하려면 ALTER DATABASE의 SET COMPATIBILITY_LEVEL 옵션을 사용하여 현재 데이터베이스의 호환성 수준을 80으로 설정하십시오. ANSI 외부 조인 연산자 (LEFT OUTER JOIN, RIGHT OUTER JOIN)를 사용하여 쿼리를 다시 작성하는 것이 좋습니다 ( ). SQL Server의 이후 버전에서 ANSI가 아닌 조인 연산자는 하위 호환성 모드에서도 지원되지 않습니다.

그러나 오류 메시지에 제안 데이터베이스를 변경하는 경우, 작동 것이다는 :

ALTER DATABASE foo SET COMPATIBILITY_LEVEL = 80; 

이 스트레칭처럼 보인다. 그러나 실제 정보가 없으면 내가 가진 유일한 추측에 관한 것입니다.

+0

" '* ='근처의 잘못된 구문은 내가 가진 메시지 중 하나였습니다. 전에 버전 2000 호환 데이터베이스였습니다. 나는 그런 종류의 문법을 본 적이 없었다. 변환해야 할 부분에 대해 변환 또는 학습을하는 가장 좋은 방법은 무엇입니까? – zortacon

+1

@zortacon : 오류 메시지는 다음과 같이 말합니다 :'ANSI 외부 조인 연산자 (LEFT OUTER JOIN, RIGHT OUTER JOIN)를 사용하여 쿼리를 다시 작성하는 것이 좋습니다 .' –

3

SQL Server 2012에서 사용되지 않는 기능은 다음과 같습니다 (list). 특히 T-SQL 섹션을 살펴보십시오. 또한 SSDT (SQL Server Data Tools)를 사용하고 DB의 오프라인 복사본을 만든 다음 버전 타겟팅을 SQL Server 2012로 설정할 수 있습니다. 출력에는 버전 간의 많은 구문 비 호환성이 표시됩니다. 도움이 될만한 SSDT에 대한 블로그를 작성했습니다 here.

관련 문제