繁体   English   中英

SQL Server查询以XML形式获取所有表的列名

[英]SQL Server Query for getting column names of all tables as XML

在我的数据库中,我打算为数据库中的所有表获取-[TableName]作为表的第一列,并将该表的所有列以“,”(逗号后跟空格-定界符)作为第二列。

Table A | ColumnA1, ColumnA2, ColumnA3  
Table B | ColumnB1, ColumnB2, ColumnB3
......................................

并将其检索为XML

<TableList>  
<TableName>TableA</TableName> <Columns> ColumnA1, ColumnA2, ColumnA3</Columns>  
<TableName>TableB</TableName> <Columns> ColumnB1, ColumnB2, ColumnB3</Columns>  
</TableList>

应该如何编写SQL查询?

这将为您提供所需的XML。

select T.name as TableName,
       (
         select ', '+C.name
         from sys.columns as C
         where C.object_id = T.object_id
         order by C.column_id
         for xml path(''), type
       ).value('substring((./text())[1], 3)', 'varchar(max)') as Columns
from sys.tables as T
order by T.name
for xml path(''), root('TableList')

但是我认为这将返回易于处理的XML。

select T.name as TableName,
       (
         select ', '+C.name
         from sys.columns as C
         where C.object_id = T.object_id
         order by C.column_id
         for xml path(''), type
       ).value('substring((./text())[1], 3)', 'varchar(max)') as Columns
from sys.tables as T
order by T.name
for xml path('Table'), root('TableList')

也许像这样。

select T.name as TableName,
       (
         select C.name as ColumnName
         from sys.columns as C
         where C.object_id = T.object_id
         order by C.column_id
         for xml path(''), type
       ) as Columns
from sys.tables as T
order by T.name
for xml path('Table'), root('TableList')

你可以试试这个

   select isc.TABLE_NAME,stuff((
    SELECT ',' + cast(column_name as varchar(20))
    FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =isc.TABLE_NAME 
     group by TABLE_NAME,COLUMN_NAME
    FOR XML PATH('') 
    ),1,1,'')  as column_name from INFORMATION_SCHEMA.COLUMNS isc
     group by TABLE_NAME

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM