1

私のデータベースでは、- [TableName] を最初の列として取得し、そのテーブルのすべての列を ", " (コンマの後にスペース - 区切り記号) として 2 番目の列として取得する予定です - DB 内のすべてのテーブル。

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 クエリはどのように記述すればよいですか?

4

2 に答える 2

4

これにより、求める 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')
于 2012-10-20T07:00:06.970 に答える
1

あなたはこれを試すことができます

   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
于 2012-10-20T06:56:30.367 に答える