在MS SQL Server 2005中不支持了吗?在MS SQL Server 2005中不支持了

2019-05-12 11:06发布

尝试运行在MS SQL Server Management Studio中查询时OVERI我得到一个错误。 我们使用MS SQL Server 2005中的Windows 2003 Server上。

下面是该查询:

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

解决这一问题将有助于我解决我的另外一个问题在这里

Answer 1:

您是否尝试过在你的面前前面加上一个分号With说法? (例如;With q As


一般常识:

  1. 您必须在查询未设计师运行此。 这听起来像你有固定的。
  2. 枚举而不是使用列* 。 即,在下面的例子中更换Col1中,col2的与要通过该表从那里他们来到前缀的实际列。
  3. 投入use DatabaseName在你的脚本,然后换行,其次是顶部GO ,紧接着又断行。
  4. 如果之前的唯一的声明With说法是GO您之间use的语句和查询,然后别无分号是必要的,因为它是在该批次的第一条语句。

  使用数据库名  走  符合Q AS          (          SELECT TableName.Col1,TableName.Col2,...              ,ROW_NUMBER()OVER(PARTITION BY DBO [1_MAIN  - 联系方式]。.Contact_ID                                                           ORDER BY DBO。[1_MAIN  - 联系方式] .Contact_ID)为Rn          DBO的[1_MAIN  - 联系方式]。              INNER JOIN dbo.Referral                  ON DBO [1_MAIN  - 联系方式]。.Contact_ID = dbo.Referral.Referral_ID              INNER JOIN dbo.prov_training_records                  ON DBO [1_MAIN  - 联系方式]。.Contact_ID = dbo.prov_training_records.Contact_ID              LEFT OUTER JOIN dbo.Resource_Center                  ON DBO [1_MAIN  - 联系方式]。.Contact_ID = dbo.Resource_Center.Contact_ID              FULL OUTER JOIN dbo.Providers                  ON DBO [1_MAIN  - 联系方式]。.Contact_ID = dbo.Providers.Contact_ID          )  选择 *  自q 



Answer 2:

问题是,你正在使用的查询设计器GUI。 别那样做。 查询设计器是垃圾。 这是无用的任何不平凡的查询开发。 键入您在Management Studio中的编辑器窗口查询。



Answer 3:

检查特定数据库的兼容级别

有一些更详细@ http://msdn.microsoft.com/en-us/library/ms178653(v=SQL.90).aspx

如果兼容级别小于90,则新的功能,如OVER子句,仅在2005年SQL,被关闭。



Answer 4:

在SQL Server 2005的文档说, OVER肯定是支持的。

问题是,在编辑器窗口中不支持它。 看看你能不能关闭所有比SQL和结果视图等窗格,使错误消失。



文章来源: No Support for OVER in MS SQL Server 2005?