日期:2014-05-18  浏览次数:20596 次

如果把表 A 的第二个列的数据读出来,语句如何写?不知道列名
如果把表 A 的第二个列的数据读出来,语句如何写?不知道列名

select * from A where......

------解决方案--------------------
declare @sql varchar(500)
select @sql=' select '+col_name(object_id('tb'),2)+' from tb'
exec(@sql)
------解决方案--------------------
SQL code
--获取表的属性,从colorder = 2 获取列名 
SELECT
  表名    = case when a.colorder=1 then d.name else '' end,
  表说明  = case when a.colorder=1 then isnull(f.value,'') else '' end,
  字段序号  = a.colorder,
  字段名  = a.name,
  标识    = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
  主键    = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
          SELECT name FROM sysindexes WHERE indid in(
            SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,
  类型    = b.name,
  占用字节数 = a.length,
  长度    = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
  小数位数  = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
  允许空  = case when a.isnullable=1 then '√'else '' end,
  默认值  = isnull(e.text,''),
  字段说明  = isnull(g.[value],'')
FROM
  syscolumns a
left join
  systypes b
on
  a.xusertype=b.xusertype
inner join
  sysobjects d
on
  a.id=d.id  and d.xtype='U' and  d.name <>'dtproperties'
left join
  syscomments e
on
  a.cdefault=e.id
left join
  sysproperties g
on
  a.id=g.id and a.colid=g.smallid 
left join
  sysproperties f
on
  d.id=f.id and f.smallid=0
where
  d.name='authors'  --如果只查询指定表,加上此条件
order by
  a.id,a.colorder

------解决方案--------------------
select distinct(col_name(object_id('table'),2)) from table
这样就可以了

------解决方案--------------------
从2楼上面的提炼出来的答案

SELECT 

字段序号 = a.name

FROM 
syscolumns a

inner join 
sysobjects d 
on 
a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where 
d.name='T_question' and a.colorder = 2 --d.name后面''为表面,a.colorder后面的''为你所想要的第几行的名称
------解决方案--------------------
临时表不支持,在sysobjects和syscolumns里面没有记录