2016-10-07 1 views
2

현재 3k + 테이블을 사용하여 매우 정규화 된 크고 큰 데이터베이스를 작업하고 있습니다. 작은 데이터 사전 외에도 올바른 데이터를 찾는 데 도움이되는 설명서가 없습니다 (인수에서 온 것입니다).SQL Server 2008 Standard는 모든 열과 가능한 데이터가있는 테이블을 모두 열로 가져옵니다.

모든 내용과 함께 모든 테이블의 모든 열을 줄 SQL 스크립트를 만들 수있는 방법이 있습니까? 결과는 모든 테이블에서 모든 단일 열만을 그룹화하는 것과 동일해야합니다.

나는 당신이 나를 보내길 바랍니다. 미안 해요. 영어 실력이 약간 녹슬 었어요.

SQL Server 2008 (표준) 내에 방법이 없으면 Java 또는 C#으로 작은 도우미를 만듭니다.

미리 감사드립니다. bg Patrick

+3

([모든 테이블과 열을 얻는] https://stackoverflow.com/questions/420741 :

테스트의 목적을 위해 제거하고 자신의 논리에 의해 교체해야 거라고 TOP 100있다/테이블에서 필드 및 각각의 데이터베이스에서 필드 가져 오기) – user5226582

+1

다음과 같이 볼 수 있습니다. http://stackoverflow.com/a/39518959/5089204이 솔루션은 하나의 큰 XML을 반환합니다 전체 데이터베이스와 열의 데이터 형식으로 메타 데이터를 추가하는 것은 쉽습니다. DB가 매우 큰 경우 작성된 ​​명령문에'TOP 5 '를 추가 할 수 있습니다. 그러면 일부 행만 반환됩니다. 구조를 얻기에 충분합니다 ... – Shnugo

+0

안녕하세요, 위에 링크 된 답변에 관심이 있다면 이진 열의 문제를 피하기 위해 편집했습니다 ... – Shnugo

답변

2

이렇게 해보십시오. 이 문은 모든 단일 열에 대해

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); 
+0

내 문제가 해결되었습니다. 감사합니다. – Pad

관련 문제