不知道列名,是否可以通过列位置查询?

bao86 2010-11-25 11:20:05
有一个表 A ,现在我不知道A里面的列名,我想把表A第二列的数据读取出来,请问是否有sql语句可以实现这个功能?
...全文
269 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
糖牙 2010-11-25
  • 打赏
  • 举报
回复
学习,收藏……
abuying 2010-11-25
  • 打赏
  • 举报
回复
--SQL查询里如何取得这个表里的第i行第j列的值,使用系统表与动态查询
/*运行环境 SQLSERVER2005*/
-- 构造数据
create table Tb
( a int null,
b int null,
c int null,
d int null
)

insert into Tb select 1,5,3,2
insert into Tb select 2,4,12,12
insert into Tb select 1,30,12,34
insert into Tb select 45,23,9,2
insert into Tb select 16,5,89,2
insert into Tb select 21,5,32,2

declare @tbname varchar(100), -- 表名
@row int, -- 行数
@column int, -- 列数
@data varchar(100) -- 返回值

-- 手动为变量赋值
--**********--
select @tbname ='Tb' --'Tb'
select @row = 1
select @column = 1
--**********--

-- 判断行列值是否超出表范围
if ( @row > ( select count(1) from Tb ) )
begin
print '输入行大于表最大行数'
end
--select @tbname = 'tempdb..' + @tbname --加上所在数据库
if ( @column > ( select max(column_id)
from sys.columns --tempdb.sys.columns
where object_id = object_id(@tbname) ) )
begin
print '输入列大于表最大列数'
end

-- 定义动态SQL
declare @sql nvarchar(2000),
@parm nvarchar(500),
@col_name varchar(100)

select @col_name = name
from sys.columns --tempdb.sys.columns
where object_id = object_id(@tbname)
and column_id = @column

select @parm = '@val varchar(10) output'

select @sql = ' select @val = ' + @col_name +
' from ( select *,
row_number()over(order by getdate()) as ordr
from ' + @tbname +
' ) a
where ordr = ' + cast(@row as varchar)
exec sp_executesql @sql,
@parm,
@data output
select @data
hao1hao2hao3 2010-11-25
  • 打赏
  • 举报
回复

declare @name varchar(20),@tablename varchar(20)
set @tablename = 'vmenu' --表名
select top 1 @name = [name] from syscolumns where id = object_id(@tablename) and [name] not in (select top 1 [name] from syscolumns where id = object_id(@tablename))
declare @sql nvarchar(200)
set @sql = 'select '+@name +' from '+@tablename
exec (@sql)


wing7742 2010-11-25
  • 打赏
  • 举报
回复
备案 待用
长空飞鸟 2010-11-25
  • 打赏
  • 举报
回复
sp_help '表名'
可以知道表的列名了,哈哈哈
rjianfeili 2010-11-25
  • 打赏
  • 举报
回复
select   name   from   syscolumns s where   id=object_id('表名')  and s.colid=2
kingbox2076 2010-11-25
  • 打赏
  • 举报
回复
SQL:
select * from tablename

C#:
string str = dt[1]
Waldenz 2010-11-25
  • 打赏
  • 举报
回复

EXEC MASTER.DBO.xp_execresultset 'SELECT ''SELECT ''+ NAME+'' FROM A''
FROM syscolumns s WHERE id=OBJECT_ID(''A'') AND s.colid=2',N'库'




不行了 找我
chuifengde 2010-11-25
  • 打赏
  • 举报
回复
EXEC MASTER.DBO.xp_execresultset 'SELECT ''SELECT ''+ NAME+'' FROM 表名'' FROM syscolumns s WHERE id=OBJECT_ID(''表名'') AND  s.colid=2',N'库'

yhtapmys 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao86 的回复:]
谢谢一楼和二楼的朋友
不知道能不能只用一个语句而不用变量实现所述功能呢?
[/Quote]

貌似不行 查某列必须指定该列名

所以楼上两大佬只好换个姿势去弄了
bao86 2010-11-25
  • 打赏
  • 举报
回复
谢谢一楼和二楼的朋友
不知道能不能只用一个语句而不用变量实现所述功能呢?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧