SQL如何将表中的列列为游标语句

时间:2011-05-04 10:25:16

标签: sql-server tableview

下面是我能够从我们的数据库中提取表名的唯一方法,将前1替换为2,3,4 ...... 499,500。

问题在于没有直接访问数据库,使用第三方程序(针对律师事务所)必须访问数据,这使得可以做什么的范围有限,因此通常的方法带回数据一般不起作用。使用“for xml auto”时,基于错误输出,使用游标返回数据。

select(
(select min(name) from 
(select top 1 name from sys.Tables order by name desc)
as ax) + ', ' + 
(select min(name) from 
(select top 2 name from sys.Tables order by name desc)
as ax)  + ', ' + 

)

现在我希望重复此过程以返回表中的第二个,第三个,第四个column_name。以下可以用于检索第一个column_name

SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table name>

但我尝试重复第一个程序失败了; top 2,top 3等返回相同的column_name。

帮助会很棒。

感谢。

2 个答案:

答案 0 :(得分:2)

这应该为您提供所需的所有信息(在SQL Server 2005上测试)

select table_name, column_name, ordinal_position, data_type
from information_schema.columns
where table_name = ''
order by 1,3
for xml auto

答案 1 :(得分:2)

尝试将for xml auto查询嵌入另一个选择语句

select (select table_name, column_name, ordinal_position, data_type
        from information_schema.columns
        where table_name = 'T'
        order by 1,3
        for xml auto)

在游标中使用它可以正常工作:

declare C cursor for
select (select table_name, column_name, ordinal_position, data_type
        from information_schema.columns
        where table_name = ''
        order by 1,3
        for xml auto)
open C
declare @L varchar(max)
fetch next from C into @L
close C
deallocate C
select @L