【发布时间】:2014-03-04 21:01:03
【问题描述】:
我在使用CASE 语句更改存储过程中的ORDER BY 语句时遇到问题。
我正在发送一个参数@sortBy,其中包含要排序的列的名称。
我的问题是 CASE 语句适用于大多数列,但不适用于其他列:
SELECT * FROM TapeView
ORDER BY
CASE
WHEN @sortBy = 'BackupJobType' THEN [BackupJobType]
WHEN @sortBy = 'ItemID' THEN [ItemID]
WHEN @sortBy = 'MediaType' THEN [MediaType]
WHEN @sortBy = 'Category' THEN [Category]
WHEN @sortBy = 'Description' THEN [Description]
WHEN @sortBy = 'PlantName' THEN [PlantName]
WHEN @sortBy = 'BackupType' THEN [BackupType]
WHEN @sortBy = 'UserID' THEN [UserID]
END
出于某种原因,这对除BackupJobType 和Description 之外的每一列都适用。
我已经检查了传入的参数的值和列的名称,并且 100% 确定它们是正确的。
我在另一个页面上有一个几乎相同的查询,并且这两列都在那里正常工作。
有什么想法吗?
编辑:我忘了提到所有这些列都是 varchar 数据类型
【问题讨论】:
-
发布一些示例输出,向我们展示它是如何不工作的。
-
原因可能与所有列必须转换为相同类型有关。没有例子,很难准确地说出发生了什么。
-
如何不工作的问题仍然适用。
-
@McFixit
@sortBy参数是否小于 varchar(11),也许是 varchar(10)?如果是这样,则“Description”变为“Descriptio”,“BackupJobType”变为“BackupJobT”,但其他列名适合。如果是这种情况,请将@sortBy数据类型提升为类似 varchar(50) 的类型。
标签: asp.net sql sql-server stored-procedures case