(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'都会出错.
我使用: 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 即可.
好像问的不是“为什么报错”而是问“为什么是admin而不是guest2转换出错”
这个问题在编译分析和绑定的时候已经报错了,而不是执行之后才报错。SQL不会傻到执行了 Select Top 1 username From (Select Top 3 username From [users] Order by username) T 之后,取得一个值和0比较的时候才报错,进行类型绑定的时候已经出错。
是不是改成这样啊?: 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
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 即可.
Select Top 1 username From (Select Top 3 username From [users] Order by username) T
之后,取得一个值和0比较的时候才报错,进行类型绑定的时候已经出错。
我想用暴错的方式显示user表中第三行的字段名称,即将guest2暴错显示出来
可是为什么还会暴出admin呢?SQL应该取了admin然后和0比较才出错的吧
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
这句是拿 username 和 0 比较了,那么在比较时就会形成
admin>0 导致出错
用count?没道理啊。上述代码的错误为“ORDER BY 子句中的列 "T.username" 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。”