这段T-SQL语句有什么错误吗,为什么不能正确执行?

 

--我的表中只有三个字段: uidID uniqueidentifier; dtDate datetime ; szDescription nvarchar(max)


--方法1
declare @order nvarchar(30)
set @order = 'dtDate'

SELECT *
FROM tb_products
ORDER BY
CASE @order
WHEN 'dtDate' THEN 2
WHEN 'uidID' THEN 1
WHEN 'szDescription' THEN 3
ELSE NULL END DESC

 

 

我的想法是动态传递排序列名 , 然后进行排序.

我知道下面这样语句可以正确执行:

 


--方法2
declare @order nvarchar(30)
set @order = 'szDescription'

SELECT *
FROM tb_products
ORDER BY
CASE @order
--WHEN 'dtDate' THEN CAST(dtDate AS varchar(50)) 
--根据 追索 的回答已经改为下面的
WHEN 'dtDate' THEN Convert(varchar(10),dtDate,102) 
WHEN 'uidID' THEN CAST(uidID AS varchar(50))
WHEN 'szDescription' THEN szDescription
ELSE NULL
END DESC

 

 

现在的问题是用方法2 无法找到函数列  .  有谁能告诉我方法1错哪儿了吗?

忽然笑
浏览 858回答 7
7回答

临摹微笑

方法2问题出在这   你把WHEN 'dtDate' THEN CAST(dtDate AS varchar(50))   改成WHEN 'dtDate' THEN Convert(varchar(10),dtDate,102) 就能排序了   至于uidID我不知道你说的是什么数据类型 不过你也这样转换试

白猪掌柜的

你说的没错,但是如果是这个原因的话,那么第二个方法也应该报错才是。

慕的地10843

@顾晓北:第一个语句排序字段错!重新修改了,请看上面代码!

largeQ

我看了下你的方法一 并测试执行了 你的这个方法不可行 你自己测试下用set @order = 1测试下 不会是按dtDate列降序排列 方法二是拼字符串 不是我想要的 : )

料青山看我应如是

有什么错误,报什么错。语句正确的啊。

不负相思意

没有报错 但就是不能按传进去的参数 排序
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server