【问题标题】:SQL Server transaction, error when ordering a select result setSQL Server 事务,排序选择结果集时出错
【发布时间】:2025-12-30 23:15:09
【问题描述】:

我无法对事务返回的结果集进行排序。

我收到一个错误:

关键字“ORDER”附近的语法不正确。

我的代码:

IF EXISTS (SELECT MenuItemID
           FROM dbo.Menu_Items_Custom
           WHERE PodID = 288 )
BEGIN
    (SELECT 
         C.MenuItemID,
         ISNULL(NewName, ItemName) AS ItemName,
         ISNULL(URL, ItemURL) AS ItemURL,
         M.Type,
         C.OrderBy
     FROM      
         Menu_Items_Custom C
     LEFT JOIN 
         Menu_Items M ON M.MenuItemID = C.MenuItemID
     WHERE     
         (ChildOf IS NULL AND PodID = 288)
     ORDER BY  
         C.OrderBy);
END;
ELSE
BEGIN
    (SELECT *
     FROM dbo.Menu_Items
     WHERE ChildOf IS NULL);
END;

【问题讨论】:

  • 对不起 orderBy 是一个字段。
  • 不,没有区别。

标签: sql-server


【解决方案1】:

您无需将SELECT 括在括号中,同时删除2 个额外的分号:

IF EXISTS ( SELECT  MenuItemID
            FROM    dbo.Menu_Items_Custom
            WHERE   PodID = 288 )
    BEGIN
        SELECT    C.MenuItemID ,
                    ISNULL(NewName, ItemName) AS ItemName ,
                    ISNULL(URL, ItemURL) AS ItemURL ,
                    M.Type ,
                    C.OrderBy
          FROM      Menu_Items_Custom C
                    LEFT JOIN Menu_Items M ON M.MenuItemID = C.MenuItemID
          WHERE     (ChildOf IS NULL
                    AND PodID = 288)
          ORDER BY  C.OrderBy

    END
ELSE
    BEGIN
        SELECT    *
        FROM      dbo.Menu_Items
        WHERE     ChildOf IS NULL
    END;

【讨论】:

  • @JamesL。不,因为它不包含ORDER BY,但是没有必要把它们拖在那里:)。 ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效除非还指定了 TOP 或 FOR XML。
  • @chris 请see this post
最近更新 更多