请教sql server 2008的查表操作

吃鱼不吃鱼尾巴
  • 34
select top 1 name from(select top 1 id,name from sysobjects where xtype='u') T order by id desc

1、哪位好心人能给我分析一下这句话么?这句话“xtype=char(85)) T order by id desc”中的“T”是干嘛用的,我怎么搜都搜不到,但是去掉又会报错;
2、这句话我先use了当前的数据库,然后只能查到当前库的表,直接“select top 1 id,name from sysobjects”的话,能看到本数据库的表和系统表。是不是理解成sysobjects where xtype='u'这个表也是限制在use的数据库里呢?我不知道自己表达清楚没有,意思就是:
A库有表a,B库有表b。但是use A;select top 1 id,name from sysobjects where xtype='u';只能看到a,却看不到b。
回复
阅读 2.8k
3 个回答
Unique
  • 811
--我们先来看看select语句的格式

select * from [TableName] where xxx

--我们再来看你的

select top 1 name from (select top 1 id,name from sysobjects where xtype='u') T order by id desc

--很明显from后面是一个表的名称撒

--所以(select top 1 id,name from sysobjects where xtype='u')表示的是从这张表查询到的结果为基础的

--而后面的T是什么呢?之前提到了,既然这是一张表,那就肯定要有名字,T就是给它命的名字

--你可以随便取名,但只要用到该表的地方名字必须相同

在SQL SEVER 2008中标准的写法应该是
select top 1
name
from(select top 1 id,name from sysobjects where xtype='u') AS T
order by id desc;
这里的AS是可以省略的,也就是将子查询命名为T
之所以看不到B的原因是因为你写了
USE A
在这条语句下,你要查的东西也只能在A表下

1、T是别名,可任意指定
2、sqlserver没具体用过,想来跟mysql类似,use库名后直接按照表名查出来的结果都是当前库的信息,mysql想查其他库的表是需要在表名前加库名的,比如select * from B.table

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏