如果一个表列数不固定,要求:除了第2列的其余列都查询出来,这种情况就要用到系统自带的一些表,来帮助我们:
sysobjects——系统对象表,保存当前数据库的对象,如试图,表,存储过程,函数等等...
重要字段:
name(对象名);
xtype(对象类型,试图--V;用户表--U,存储过程--P);
id(对象id);
select * from sysobjects
结果如下:
syscolumns——数据库字段表,保存表,试图,存储过程的参数;表,试图的每列在表中占一行,存储过程每个参数在表中占一行.
重要字段:
name(列名或者存储过程参数的名称);
id(所属对象的id);
colorder(列号,1,2,3...);
select * from syscolumns
结果如下:
现在根据sysobjects和syscolumns联合查询获取用户表weibo所有列信息:
select a.name 对象名,a.xtype 对象类型,a.id 对象id,b.name 列名,b.id 所属对象的id,b.colorder 列号
from sysobjects a,syscolumns b where a.id=b.id and a.xtype='U' and a.name='weibo'
查询结果:
可以根据列号<>2,组合查询字符串达到我们想要的结果,最终的sql脚本:
declare @list varchar(1000),@sql nvarchar(1000)
set @list=''
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype='U' and a.name='weibo' and (b.colorder<>2)
set @sql='select '+right(@list,len(@list)-1)+' from weibo'
exec (@sql)