2011-04-25 7 views
1

MS SQL Server Management Studio에서 쿼리를 실행하려고하면 OVERI 오류가 발생합니다. 우리는 MS SQL Server 2005를 Windows 2003 서버에서 사용합니다. 다음 정보와MS SQL Server 2005에서 OVER를 지원하지 않습니까?

WITH q AS 
     (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY dbo.[1_MAIN - Contacts].Contact_ID ORDER BY dbo.[1_MAIN - Contacts].Contact_ID) AS rn 
     FROM dbo.[1_MAIN - Contacts] 
     INNER JOIN 
       dbo.Referral 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.Referral.Referral_ID 
     INNER JOIN 
       dbo.prov_training_records 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.prov_training_records.Contact_ID 
     LEFT OUTER JOIN 
       dbo.Resource_Center 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.Resource_Center.Contact_ID 
     FULL OUTER JOIN 
       dbo.Providers 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.Providers.Contact_ID 
     ) 
SELECT * 
FROM q 

내가 그것을 실행하면 그냥 팝업을 얻을 창 :

여기

쿼리입니다 - "쿼리 정의가 다른"

설명

창 제목 - "SQL 창의 내용을 구문 분석하는 동안 다음과 같은 오류가 발생했습니다."

오류 - "OVER SQL 구문 또는 문이 지원되지 않습니다."

마지막으로 "다이어그램 및 조건 창에서 그래픽으로 쿼리를 표현할 수 없습니다."라고 표시됩니다.

그러나 다이어그램 또는 기준 창이 열려 있지 않습니다.

올바른 구문이 있는지 확인해야합니다. 구문이 올바른 경우 Management Studio에서이 오류가 발생하는 이유를 해결하거나 해결 방법을 찾아 다른 방법으로 해결해야합니다.

스펙에 "OVER"가 지원된다고 알고 있는데도 불구하고 오류가 발생합니다. 새 쿼리 창에서

나는 그것이 작동이 실행하는 경우 :

USE abtcontacts; 
WITH q AS 
     (
     SELECT dbo.[1_MAIN - Contacts].Contact_ID, dbo.[1_MAIN - Contacts].Date_entered_into_Database, dbo.[1_MAIN - Contacts].Date_of_Initial_Contact, 
         dbo.[1_MAIN - Contacts].[Company_ Name], dbo.[1_MAIN - Contacts].Key_Contact_Title, dbo.[1_MAIN - Contacts].Key_Contact_First_Name, 
         dbo.[1_MAIN - Contacts].Key_Contact_Middle, dbo.[1_MAIN - Contacts].Key_Contact_Last_Name, dbo.[1_MAIN - Contacts].Key_Credential, 
         dbo.[1_MAIN - Contacts].Key_Contact_Occupation, dbo.[1_MAIN - Contacts].Key_Degree_1, dbo.[1_MAIN - Contacts].Key_Degree_2, 
         dbo.[1_MAIN - Contacts].Key_Degree_3, dbo.[1_MAIN - Contacts].Date_of_Highest_Degree, dbo.[1_MAIN - Contacts].Work_Setting, 
         dbo.[1_MAIN - Contacts].Website_Address, dbo.[1_MAIN - Contacts].Email_1_Key_Contact, dbo.[1_MAIN - Contacts].Email_2, 
         dbo.[1_MAIN - Contacts].Email_3, dbo.[1_MAIN - Contacts].Day_Time_Phone_Number, dbo.[1_MAIN - Contacts].Extension, 
         dbo.[1_MAIN - Contacts].Mobile_Phone_Number, dbo.[1_MAIN - Contacts].Bus_Fax_Number, dbo.[1_MAIN - Contacts].Home_Phone_Number, 
         dbo.[1_MAIN - Contacts].Home_Fax_Number, dbo.[1_MAIN - Contacts].Mailing_Street_1, dbo.[1_MAIN - Contacts].Mailing_Street_2, 
         dbo.[1_MAIN - Contacts].Mailing_City, dbo.[1_MAIN - Contacts].Mailing_State, dbo.[1_MAIN - Contacts].[Mailing_Zip/Postal], 
         dbo.[1_MAIN - Contacts].Mailing_Country, dbo.[1_MAIN - Contacts].[Bad_Address?], dbo.[1_MAIN - Contacts].[PROV/REG?], 
         dbo.[1_MAIN - Contacts].status_flag, dbo.[1_MAIN - Contacts].status_flag AS status_flag2, dbo.Providers.Referral_Source, dbo.Referral.Contact_Source, 
         dbo.Resource_Center.cert_start_date, dbo.Resource_Center.cert_exp_date, dbo.prov_training_records.Contact_ID AS Expr2, 
         dbo.prov_training_records.date_reg_email_sent, dbo.Resource_Center.access, dbo.Providers.Contact_ID AS Expr1, 
       ROW_NUMBER() OVER (PARTITION BY dbo.[1_MAIN - Contacts].Contact_ID ORDER BY dbo.[1_MAIN - Contacts].Contact_ID) AS rn 
     FROM dbo.[1_MAIN - Contacts] 
     INNER JOIN 
       dbo.Referral 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.Referral.Referral_ID 
     INNER JOIN 
       dbo.prov_training_records 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.prov_training_records.Contact_ID 
     LEFT OUTER JOIN 
       dbo.Resource_Center 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.Resource_Center.Contact_ID 
     FULL OUTER JOIN 
       dbo.Providers 
     ON  dbo.[1_MAIN - Contacts].Contact_ID = dbo.Providers.Contact_ID 
     ) 
SELECT * 
FROM q 
WHERE rn = 1 

이 문제를 해결하는 것은 내 다른 문제를 해결하는 데 도움이 될 것입니다 over here

+1

CTRL + N을 눌러 빈 스크립트 창에서 실행하면 어떨까요? 나는 비주얼 디자이너가 그 질문에 대처할 수있을 지 의심 스럽다. –

+0

"새 쿼리"버튼을 클릭하고 창에 쿼리를 입력하면 작동합니까? – Gabe

+0

'[1_MAIN - Contacts]는 끔찍한 테이블 이름입니다. – Hogan

답변

3

With 성명 앞에 세미콜론을 추가 했습니까? (예를 들어, ;With q As)


일부 일반적인 사항 : 당신은 쿼리하지 디자이너에서이 작업을 실행해야합니다

  1. 합니다. 너는 그것을 고쳤다 고 들린다.
  2. * 대신 열을 열거하십시오. 즉, 아래의 예에서 Col1, Col2를 테이블의 접두어가 붙은 실제 열로 대체합니다.
  3. 스크립트 상단에 use DatabaseName을 입력하고 줄 바꿈 한 다음 GO을 입력 한 다음 줄 바꿈을 다시 지정하십시오.
  4. With 문 앞에있는 유일한 문이 use 문과 쿼리 사이에 GO 인 경우 일괄 처리의 첫 번째 문이므로 세미콜론이 필요하지 않습니다.

use DatabaseName 
GO 
WITH q AS 
     (
     SELECT TableName.Col1, TableName.Col2,... 
      , ROW_NUMBER() OVER (PARTITION BY dbo.[1_MAIN - Contacts].Contact_ID 
                 ORDER BY dbo.[1_MAIN - Contacts].Contact_ID) AS rn 
     FROM dbo.[1_MAIN - Contacts] 
      INNER JOIN dbo.Referral 
       ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.Referral.Referral_ID 
      INNER JOIN dbo.prov_training_records 
       ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.prov_training_records.Contact_ID 
      LEFT OUTER JOIN dbo.Resource_Center 
       ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.Resource_Center.Contact_ID 
      FULL OUTER JOIN dbo.Providers 
       ON dbo.[1_MAIN - Contacts].Contact_ID = dbo.Providers.Contact_ID 
     ) 
SELECT * 
FROM q 

+0

저는 T-SQL에서 세미콜론을 사용한 적이 없습니다. 그것이 어떻게 도움이 될지 상상하기 어렵습니다. – Gabe

+2

@Gabe - 공통 테이블 식을 사용하려면 쿼리가 일괄 처리의 첫 번째 문이거나 이전 문을 세미콜론으로 닫아야합니다. "기술적으로", 당신은 모든 문장을 세미콜론으로 끝내기로되어 있습니다. 그러나 당신은 아직 (아직) 필요하지 않습니다. – Thomas

+0

이 구문 오류로 실패합니다. – UpHelix

1

documentation for SQL Server 2005OVER 확실하게 지원되는 것을 말한다.

문제는 편집기 창이 지원하지 않는다는 것입니다. 오류를 없애기 위해 SQL 및 결과보기 이외의 모든 창을 닫을 수 있는지 확인하십시오.

+0

그래, 나는 다른 모든 창을 제거하지만 새로운 쿼리 창에서 실행하지 않으면 여전히 발생합니다. – UpHelix

1

호환성 수준이 OVER처럼, 다음, 새로운 기능 90 이하이면 http://msdn.microsoft.com/en-us/library/ms178653(v=SQL.90).aspx

@ 좀 더 세부 사항이

특정 데이터베이스의 호환성 수준을 확인 SQL 2005에서만 사용할 수있는 절이 꺼져 있습니다.

+0

이것은 OP의 문제는 아닙니다 (제 생각 엔). 그들은 "편집 테이블"을 클릭하여 스크립트 편집기에 들어갑니다. 방금'선택 ROW_NUMBER() 번호 (순서대로 번호) FROM master..spt_values' 시도하고 확실히 그것을 좋아하지 않았다. –

+0

방금 ​​다른 사람이 OP 질문의 호환성 수준에 의문을 제기했다는 것을 깨달았습니다. 대답은 90 이었으므로 분명히 맞지 않았습니다. –

+0

그래, 그 90. ​​ – UpHelix

3

문제는 쿼리 디자이너 GUI를 사용하고 있다는 것입니다. 그만해. 쿼리 디자이너는 쓰레기입니다. 평범하지 않은 쿼리 개발에는 쓸모가 없습니다. Management Studio 편집기 창에서 쿼리를 입력하십시오.

+0

달콤함, 나는 정말로 좋아하지 않는다. GUI 기능을 사용하여 쿼리를 실행하고 새로운 "뷰"를 만드는 데 사용합니다. 이 SQL은 나중에 선택할 수있는 "보기"를 만드는 것입니다. – UpHelix

+1

@Dale, right. 따라서 뷰 디자이너를 사용하지 마십시오. 뷰를 만드는 방법은 CREATE VIEW 문을 사용하는 것입니다. 그렇게하면 오류가 발생하지 않습니다. 오류는 순전히 GUI 버그/기능입니다. – sqlvogel

관련 문제