이렇게 해보십시오. 이 문은 모든 단일 열에 대해
SELECT colABC FROM SomeTable GROUP BY colABC
과 같은 하나의 문을 생성하고 하나의 단일 XML로 전체를 반환합니다.
하지만 엄청난 시간이 걸릴 수 있습니다. 내 테스트를 위해 그룹화되지 않은 일부 데이터 유형을 제외했습니다. 데이터
생성 된 명령문에는 많은 열이 있어야합니다. 알맞은 테이블 이름에 대한 입력을 줄이거 나 쿼리를 분할하십시오.
DECLARE @Commands TABLE(ID INT IDENTITY,cmd NVARCHAR(MAX));
WITH AllColumns AS
(
SELECT t.TABLE_CATALOG,t.TABLE_SCHEMA,t.TABLE_NAME,c.COLUMN_NAME,c.ORDINAL_POSITION,c.DATA_TYPE
FROM INFORMATION_SCHEMA.TABLES AS t
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS c ON c.TABLE_CATALOG=t.TABLE_CATALOG AND c.TABLE_SCHEMA=t.TABLE_SCHEMA AND c.TABLE_NAME=t.TABLE_NAME
WHERE t.TABLE_TYPE='BASE TABLE'
)
INSERT INTO @Commands(cmd)
SELECT TOP 100 '(SELECT ' + QUOTENAME(COLUMN_NAME) + ' AS [*]'
+ ' FROM ' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
+ ' GROUP BY ' + QUOTENAME(COLUMN_NAME)
+ ' FOR XML PATH(''x''),TYPE) AS ' + QUOTENAME(TABLE_CATALOG + '_' + TABLE_SCHEMA + '_' + TABLE_NAME + '_' + COLUMN_NAME)
FROM AllColumns
WHERE DATA_TYPE NOT IN('image','text','uniqueidentifier','datetime','xml') AND DATA_TYPE NOT LIKE '%binary%' ;
DECLARE @finalCommand NVARCHAR(MAX)=
(
SELECT 'SELECT '
+ STUFF(
(
SELECT ',' + cmd
FROM @Commands
ORDER BY ID
FOR XML PATH('')
),1,1,''
)
+ ' FOR XML PATH(''AllColumnsDistinct'')'
);
EXEC(@finalCommand);
([모든 테이블과 열을 얻는] https://stackoverflow.com/questions/420741 :
테스트의 목적을 위해 제거하고 자신의 논리에 의해 교체해야 거라고
TOP 100
있다/테이블에서 필드 및 각각의 데이터베이스에서 필드 가져 오기) – user5226582다음과 같이 볼 수 있습니다. http://stackoverflow.com/a/39518959/5089204이 솔루션은 하나의 큰 XML을 반환합니다 전체 데이터베이스와 열의 데이터 형식으로 메타 데이터를 추가하는 것은 쉽습니다. DB가 매우 큰 경우 작성된 명령문에'TOP 5 '를 추가 할 수 있습니다. 그러면 일부 행만 반환됩니다. 구조를 얻기에 충분합니다 ... – Shnugo
안녕하세요, 위에 링크 된 답변에 관심이 있다면 이진 열의 문제를 피하기 위해 편집했습니다 ... – Shnugo