是select top 1 username,将varchar的username转换成int时出错的。

解决方案 »

  1.   

    (Select Top 1 username From (Select Top 3 username From [users] Order by username) T Order by username desc)>0 如果username不是'0123456789'之类的字符串,是不能和INT型数据相比较的.不管你返回的是'admin'还是'guest'都会出错.
      

  2.   

    我使用: 
    select * from users where id=1 
    and (Select Top 1 username From (Select Top 3 username From [users] Order by username) T Order by username desc)>0 --
    从你的查询语句看不出你具体的意思.如上貌似:select * from [user] where id = 1 即可.
      

  3.   

    好像问的不是“为什么报错”而是问“为什么是admin而不是guest2转换出错”
      

  4.   

    这个问题在编译分析和绑定的时候已经报错了,而不是执行之后才报错。SQL不会傻到执行了
       Select Top 1 username From (Select Top 3 username From [users] Order by username) T
    之后,取得一个值和0比较的时候才报错,进行类型绑定的时候已经出错。
      

  5.   


    我想用暴错的方式显示user表中第三行的字段名称,即将guest2暴错显示出来
      

  6.   


    可是为什么还会暴出admin呢?SQL应该取了admin然后和0比较才出错的吧
      

  7.   

    这个问题在编译分析和绑定的时候已经报错了,而不是执行之后才报错。编译先出现的是 admin  当然报这个错
      

  8.   

    是不是改成这样啊?:
    select * from users where id=1 
    and (Select Top 1 count(username) From (Select Top 3 username From [users] Order by username) T Order by username desc)>0  
      

  9.   

    and(.... username...)>0  这句错了
    这句是拿  username 和 0 比较了,那么在比较时就会形成
    admin>0  导致出错
      

  10.   


    用count?没道理啊。上述代码的错误为“ORDER BY 子句中的列 "T.username" 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。”