2012-10-20 34 views
0

在我的數據庫中,我打算將 - [TableName]作爲第一列,並將該表的所有列放在「,」(逗號後跟空格 - 分隔符...作爲第二列 - 在數據庫中的所有表用於獲取所有表的列名爲XML的SQL Server查詢

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

這會給你你要求的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') 
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 
相關問題