我有一个存储过程,其中包含由联合连接的 3 个查询。这行得通。它目前有一个按值设置的顺序,如下所示:
ORDER BY [CategoryTypeID], [SortOrder], [Name]
我想让这个动态,所以我尝试使用这样的 case 语句:
ORDER BY CASE WHEN @sort = 0 then [CategoryTypeID] ELSE [SortOrder] end
但是,当我这样做时,sql抱怨如果语句包含联合,则按项目排序必须出现在选择列表中......等
但是,如果我更改上述内容以避免使用参数:
ORDER BY CASE WHEN 0 = 0 then [CategoryTypeID] ELSE [SortOrder] end
这样可行。为什么当我使用一个参数而实际上并没有按顺序使用该参数时会不高兴?我什至尝试在选择语句中包含参数,但它仍然给了我同样的错误。
我也尝试过 case @sort when 1 etc,但得到了相同的结果。我确实在我的存储过程中声明了参数 - @sort int = 0
这是 MSSQL 2012 快递
编辑 - 为了更加清晰
ORDER BY CASE WHEN @sort = 0 then [SortOrder] ELSE [CategoryTypeID] end
和
ORDER BY CASE WHEN @sort = 0 then [CategoryTypeID] ELSE [CategoryTypeID] end
这两个语句也都失败,并出现“必须出现在选择列表中”错误。而且我并没有尝试同时使用这两个语句。只是将它们作为示例,列本身似乎不是问题。它使用似乎是一个问题的参数,即使参数本身没有被选择或排序。