求帮助!ADO GetCollect取不到CASE WHEN THEN END的数据怎么解决?

winsinger 2016-01-21 10:00:10
ADO连接SQLServer数据库,SQL如下:
_bstr_t bstrSql("");
bstrSql += "SELECT Name = C.name, ";
bstrSql += "SORT = Case INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending') ";
bstrSql += "WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE ' ' END ";
bstrSql += "FROM " + m_strDbName + ".sys.indexes IDX ";
...

使用pRrdset->GetCollect(_variant_t("Name"))
或pRrdset->GetCollect(_variant_t(long(0)))是可以取到值的。

但是 用同样的方法却取不到SORT的值。
pRrdset->GetCollect(_variant_t("SORT"))
pRrdset->GetCollect(_variant_t(long(1)))
都不能取到值,这是怎么回事?是不是因为SORT是CASE WHEN THEN END判断出来的,而不是真正的DB数据?
取到值得.vt为VT_BSTR,内容为L""
该怎么解决呢?
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
winsinger 2016-01-21
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
先将你的SQL语句写到一个存储过程中,然后ADO调用这个存储过程。
项目要求,不让用存储过程呀。
winsinger 2016-01-21
  • 打赏
  • 举报
回复
引用 2 楼 zwfgdlc 的回复:
估计是SQL语句的问题,在SQL查询分析器测试过没有
这个SQL语句执行是没有问题的,可以查询到结果,第一个字段的值也能取得到,就是第二个字段取到的值为空,我怀疑是因为第二个字段的值是用CASE WHEN THEN END判断出来的,并非数据库表中真是存在的数据。不知道这样的数据改怎么取到。
zwfgdlc 2016-01-21
  • 打赏
  • 举报
回复
估计是SQL语句的问题,在SQL查询分析器测试过没有
赵4老师 2016-01-21
  • 打赏
  • 举报
回复
先将你的SQL语句写到一个存储过程中,然后ADO调用这个存储过程。
winsinger 2016-01-21
  • 打赏
  • 举报
回复
引用 5 楼 zwfgdlc 的回复:
你把ELSE ' ' END换其他的字符,不要空值试下 比如ELSE '123 ' END 确定下是不是SQL语句的问题
找到问题的原因了。 这个SQL的本意是想查找某个表的聚集索引中各个字段的SORT顺序,由于ADO连接对象的连接串中对数据库设置的权限不够,调用SQL函数INDEXKEY_PROPERTY总是返回NULL,所以执行SQL语句总是会到分支ELSE中。并不是我怀疑的无法取得数值的问题。 非常感谢各位的帮助。
zwfgdlc 2016-01-21
  • 打赏
  • 举报
回复
你把ELSE ' ' END换其他的字符,不要空值试下 比如ELSE '123 ' END 确定下是不是SQL语句的问题

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧