2012-10-20 3 views
0

내 데이터베이스에서 첫 번째 열로 - [TableName]을 가져오고 그 테이블의 모든 열을 ","(쉼표 뒤에 공백 구분 기호 ... 두 번째 열로 -. DB를 모든 테이블에 대한SQL Server 모든 테이블의 열 이름을 XML로 가져 오는 쿼리

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

그리고 SQL 쿼리를 작성해야 어떻게 XML

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

로 검색

답변

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 
관련 문제