【发布时间】:2009-10-25 14:09:16
【问题描述】:
当我调用这个存储过程时:
ALTER PROCEDURE [dbo].[GetSorted]
(
@OrderByColumn nvarchar(256)
)
AS
SET NOCOUNT ON
SELECT itDocs.AddedDate, itDocs.AddedBy FROM itDocs
ORDER BY
CASE WHEN @OrderByColumn='AddedDate' THEN itDocs.AddedDate
WHEN @OrderByColumn='AddedBy' THEN itDocs.AddedBy
END ASC
我得到错误:
转换日期时转换失败 和/或字符串中的时间
.
这就是我所说的 SP:
DECLARE @return_value int
EXEC @return_value = [dbo].[GetSorted]
@OrderByColumn = 'AddedBy'
SELECT 'Return Value' = @return_value
GO
更新: 如果我按照第 2 个答案中的建议使用多案例方法, 尝试为方向添加另一个案例时出现错误:
ORDER BY
CASE WHEN @OrderDirection=0 THEN
CASE WHEN @OrderByColumn='AddedDate' THEN itDocs.AddedDate END ASC,
CASE WHEN @OrderByColumn='AddedBy' THEN itDocs.AddedBy END ASC
end
CASE WHEN @OrderDirection=1 THEN
【问题讨论】:
-
关于您的更新,要将订单方向作为参数添加到存储过程中,您可以扩展 CASE 语句中的布尔表达式以检查列和方向。请查看我的更新答案。
标签: sql sql-server sql-order-by