为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

忽然笑 2018-12-06 16:58:34
  --我的表中只有三个字段: uidID uniqueidentifier; dtDate datetime ; szDescription nvarchar(max)--方法1declare @order nvarchar(30)set @order = 'dtDate'SELECT * FROM tb_productsORDER BY CASE @orderWHEN 'dtDate' THEN 2 WHEN 'uidID' THEN 1WHEN 'szDescription' THEN 3 ELSE NULL END DESC     我的想法是动态传递排序列名 , 然后进行排序. 我知道下面这样语句可以正确执行:   --方法2declare @order nvarchar(30)set @order = 'szDescription'SELECT * FROM tb_productsORDER BYCASE @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 szDescriptionELSE NULLEND DESC     现在的问题是用方法2 无法找到函数列  .  有谁能告诉我方法1错哪儿了吗?
查看完整描述

7 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

方法2问题出在这

  你把WHEN 'dtDate' THEN CAST(dtDate AS varchar(50))

  改成WHEN 'dtDate' THEN Convert(varchar(10),dtDate,102) 就能排序了

  至于uidID我不知道你说的是什么数据类型 不过你也这样转换试

查看完整回答
反对 回复 2019-01-07
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

你说的没错,但是如果是这个原因的话,那么第二个方法也应该报错才是。
查看完整回答
反对 回复 2019-01-07
?
慕的地10843

TA贡献1785条经验 获得超8个赞

@顾晓北:第一个语句排序字段错!重新修改了,请看上面代码!
查看完整回答
反对 回复 2019-01-07
?
largeQ

TA贡献2039条经验 获得超7个赞

我看了下你的方法一 并测试执行了 你的这个方法不可行 你自己测试下用set @order = 1测试下 不会是按dtDate列降序排列 方法二是拼字符串 不是我想要的 : )
查看完整回答
反对 回复 2019-01-07
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-01-07
?
不负相思意

TA贡献1777条经验 获得超10个赞

没有报错 但就是不能按传进去的参数 排序
查看完整回答
反对 回复 2019-01-07
  • 7 回答
  • 0 关注
  • 857 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信