下面是我能够从我们的数据库中提取表名的唯一方法,将前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。
帮助会很棒。
感谢。
答案 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