我有一个存储过程,我正在使用这个变量,即@orderBy。
下面是我的代码:
ORDER BY
CASE
WHEN @orderBy = 'ClientName' THEN c.LastName
WHEN @orderBy = 'EmployerName' THEN cda.Name
WHEN @orderBy = 'EmploymentDate' THEN cda.StartDate
END问题是,当我使用@orderBy变量时,它是一个varchar,它在第三行给出了错误:
如果我注释第三行,即WHEN @orderBy = 'EmploymentDate' THEN cda.StartDate,Conversion failed when converting character string to smalldatetime data type.工作正常
如何克服这个数据类型转换错误?
提前谢谢。
发布于 2011-06-28 19:21:31
您可以使用逐列用例来删除混合类型;
ORDER BY
CASE WHEN @orderBy = 'ClientName' THEN c.LastName END,
CASE WHEN @orderBy = 'EmployerName' THEN cda.Name END,
CASE WHEN @orderBy = 'EmploymentDate' THEN cda.StartDate END发布于 2011-06-28 19:28:33
您必须分隔数据类型
ORDER BY
CASE
WHEN @orderBy = 'ClientName' THEN c.LastName
WHEN @orderBy = 'EmployerName' THEN cda.Name
ELSE ''
END,
CASE
WHEN @orderBy = 'EmploymentDate' THEN cda.StartDate
ELSE '19000101'
END或者将smalldatetime转换为varchar,但保留排序逻辑
ORDER BY
CASE
WHEN @orderBy = 'ClientName' THEN c.LastName
WHEN @orderBy = 'EmployerName' THEN cda.Name
--gives "yyyy-mm-ddThh:mm:ss.mmm "
WHEN @orderBy = 'EmploymentDate' THEN CONVERT(varchar(30), cda.StartDate, 121)
END或者有3种不同的情况,根据AlexK的回答
发布于 2011-06-28 19:19:59
尝试替换
WHEN @orderBy = 'EmploymentDate' THEN cda.StartDate使用
WHEN @orderBy = 'EmploymentDate' THEN cast(cda.StartDate as VarChar)https://stackoverflow.com/questions/6505518
复制相似问题