복붙노트

[SQL] SQL 서버의 모든 데이터베이스의 모든 테이블에 대한 열 이름을 찾는 방법

SQL

SQL 서버의 모든 데이터베이스의 모든 테이블에 대한 열 이름을 찾는 방법

나는 모든 데이터베이스의 모든 테이블의 모든 열 이름을 찾고 싶어요. 나를 위해 그렇게 할 수있는 쿼리가 있습니까? 데이터베이스는 마이크로 소프트 SQL 서버 2000입니다.

해결법

  1. ==============================

    1.이 시도:

    이 시도:

    select 
        o.name,c.name 
        from sys.columns            c
            inner join sys.objects  o on c.object_id=o.object_id
        order by o.name,c.column_id
    

    결과 열 이름이 될 것이다 :

    select 
         o.name as [Table], c.name as [Column]
         from sys.columns            c
             inner join sys.objects  o on c.object_id=o.object_id
         --where c.name = 'column you want to find'
         order by o.name,c.name
    

    또는 자세한 내용에 대한 :

    SELECT
        s.name as ColumnName
            ,sh.name+'.'+o.name AS ObjectName
            ,o.type_desc AS ObjectType
            ,CASE
                 WHEN t.name IN ('char','varchar') THEN t.name+'('+CASE WHEN s.max_length<0 then 'MAX' ELSE CONVERT(varchar(10),s.max_length) END+')'
                 WHEN t.name IN ('nvarchar','nchar') THEN t.name+'('+CASE WHEN s.max_length<0 then 'MAX' ELSE CONVERT(varchar(10),s.max_length/2) END+')'
                WHEN t.name IN ('numeric') THEN t.name+'('+CONVERT(varchar(10),s.precision)+','+CONVERT(varchar(10),s.scale)+')'
                 ELSE t.name
             END AS DataType
    
            ,CASE
                 WHEN s.is_nullable=1 THEN 'NULL'
                ELSE 'NOT NULL'
            END AS Nullable
            ,CASE
                 WHEN ic.column_id IS NULL THEN ''
                 ELSE ' identity('+ISNULL(CONVERT(varchar(10),ic.seed_value),'')+','+ISNULL(CONVERT(varchar(10),ic.increment_value),'')+')='+ISNULL(CONVERT(varchar(10),ic.last_value),'null')
             END
            +CASE
                 WHEN sc.column_id IS NULL THEN ''
                 ELSE ' computed('+ISNULL(sc.definition,'')+')'
             END
            +CASE
                 WHEN cc.object_id IS NULL THEN ''
                 ELSE ' check('+ISNULL(cc.definition,'')+')'
             END
                AS MiscInfo
        FROM sys.columns                           s
            INNER JOIN sys.types                   t ON s.system_type_id=t.user_type_id and t.is_user_defined=0
            INNER JOIN sys.objects                 o ON s.object_id=o.object_id
            INNER JOIN sys.schemas                sh on o.schema_id=sh.schema_id
            LEFT OUTER JOIN sys.identity_columns  ic ON s.object_id=ic.object_id AND s.column_id=ic.column_id
            LEFT OUTER JOIN sys.computed_columns  sc ON s.object_id=sc.object_id AND s.column_id=sc.column_id
            LEFT OUTER JOIN sys.check_constraints cc ON s.object_id=cc.parent_object_id AND s.column_id=cc.parent_column_id
        ORDER BY sh.name+'.'+o.name,s.column_id
    

    편집하다 여기에 모든 데이터베이스의 모든 열을 얻을 수있는 기본적인 예입니다 :

    DECLARE @SQL varchar(max)
    SET @SQL=''
    SELECT @SQL=@SQL+'UNION
    select 
    '''+d.name+'.''+sh.name+''.''+o.name,c.name,c.column_id
    from '+d.name+'.sys.columns            c
        inner join '+d.name+'.sys.objects  o on c.object_id=o.object_id
        INNER JOIN '+d.name+'.sys.schemas  sh on o.schema_id=sh.schema_id
    '
    FROM sys.databases d
    SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
    --print @SQL
    EXEC (@SQL)
    

    편집 SQL 서버 2000 버전

    DECLARE @SQL varchar(8000)
    SET @SQL=''
    SELECT @SQL=@SQL+'UNION
    select 
    '''+d.name+'.''+sh.name+''.''+o.name,c.name,c.colid
    from '+d.name+'..syscolumns            c
        inner join sysobjects  o on c.id=o.id
        INNER JOIN sysusers  sh on o.uid=sh.uid
    '
    FROM master.dbo.sysdatabases d
    SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
    --print @SQL
    EXEC (@SQL)
    

    편집하다 몇 가지 의견을 바탕으로, 여기 sp_MSforeachdb를 사용하여 버전입니다 :

    sp_MSforeachdb 'select 
        ''?'' AS DatabaseName, o.name AS TableName,c.name AS ColumnName
        from sys.columns            c
            inner join ?.sys.objects  o on c.object_id=o.object_id
        --WHERE ''?'' NOT IN (''master'',''msdb'',''tempdb'',''model'')
        order by o.name,c.column_id'
    
  2. ==============================

    2.왜 사용하지 않을

    왜 사용하지 않을

    Select * From INFORMATION_SCHEMA.COLUMNS
    

    당신은과 특정을 DB를 만들 수 있습니다

    Select * From DBNAME.INFORMATION_SCHEMA.COLUMNS
    
  3. ==============================

    3.

    SELECT * 
    FROM information_schema.columns 
    WHERE column_name = 'My_Column'
    

    이 쿼리 전에 사용 [DB_NAME]와 현재 데이터베이스의 이름을 설정해야합니다.

  4. ==============================

    4.당신을 위해 더 나은 방법

    당신을 위해 더 나은 방법

    sp_MSForEachDB @command1='USE ?;
    SELECT 
        Table_Catalog 
        ,Table_Schema
        ,Table_Name
        ,Column_Name
        ,Data_Type
        ,Character_Maximum_Length
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME like ''%ColumnNameHere%'''
    
  5. ==============================

    5.일반적으로 나는 커서의 사용을 피하기 위해해야 ​​할 무엇이든 내가 할 수있는 노력하지만, 다음 쿼리는 당신에게 당신이 필요한 모든 것을 얻을 것이다 :

    일반적으로 나는 커서의 사용을 피하기 위해해야 ​​할 무엇이든 내가 할 수있는 노력하지만, 다음 쿼리는 당신에게 당신이 필요한 모든 것을 얻을 것이다 :

    --Declare/Set required variables
    DECLARE @vchDynamicDatabaseName AS VARCHAR(MAX),
            @vchDynamicQuery As VARCHAR(MAX),
            @DatabasesCursor CURSOR
    
    SET @DatabasesCursor = Cursor FOR
    
    --Select * useful databases on the server
    SELECT name 
    FROM sys.databases 
    WHERE database_id > 4 
    ORDER by name
    
    --Open the Cursor based on the previous select
    OPEN @DatabasesCursor
    FETCH NEXT FROM @DatabasesCursor INTO @vchDynamicDatabaseName
    WHILE @@FETCH_STATUS = 0
       BEGIN
    
       --Insert the select statement into @DynamicQuery 
       --This query will select the Database name, all tables/views and their columns (in a comma delimited field)
       SET @vchDynamicQuery =
       ('SELECT ''' + @vchDynamicDatabaseName + ''' AS ''Database_Name'',
              B.table_name AS ''Table Name'',
             STUFF((SELECT '', '' + A.column_name
                   FROM ' + @vchDynamicDatabaseName + '.INFORMATION_SCHEMA.COLUMNS A
                   WHERE A.Table_name = B.Table_Name
                   FOR XML PATH(''''),TYPE).value(''(./text())[1]'',''NVARCHAR(MAX)'')
                   , 1, 2, '''') AS ''Columns''
       FROM ' + @vchDynamicDatabaseName + '.INFORMATION_SCHEMA.COLUMNS B
       WHERE B.TABLE_NAME LIKE ''%%''
             AND B.COLUMN_NAME LIKE ''%%''
       GROUP BY B.Table_Name
       Order BY 1 ASC')
    
       --Print @vchDynamicQuery
       EXEC(@vchDynamicQuery)
    
       FETCH NEXT FROM @DatabasesCursor INTO @vchDynamicDatabaseName
    END
    CLOSE @DatabasesCursor
    DEALLOCATE @DatabasesCursor
    GO
    

    나는 메인 쿼리에 WHERE 절을 추가 (예 : B.TABLE_NAME LIKE '%%' 'AND B.COLUMN_NAME LIKE'%% '') 그래서 당신이 원하는 경우 특정 테이블 및 / 또는 열을 검색 할 수 있음 .

  6. ==============================

    6.사용자 @KM 가장 대답을 말한다.

    사용자 @KM 가장 대답을 말한다.

    내가 사용이 :

    Declare @Table_Name VarChar(100) ,@Column_Name VarChar(100)
    Set @Table_Name = ''
    Set @Column_Name = ''
    
    Select 
    RowNumber = Row_Number() Over( PARTITION BY T.[Name] Order By T.[Name],C.column_id  ),
    SCHEMA_NAME( T.schema_id ) As SchemaName ,  
    T.[Name] As Table_Name ,
    C.[Name] As Field_Name , 
    sysType.name ,
    C.max_length , C.is_nullable , C.is_identity , C.scale , C.precision  
    From Sys.Tables As T
    Left Join Sys.Columns As C On ( T.[Object_Id] = C.[Object_Id] )
    Left Join sys.types As sysType On ( C.user_type_id = sysType.user_type_id )
    Where ( Type = 'U' )
        And ( C.Name Like '%' + @Column_Name + '%' )  
        And ( T.Name Like '%' + @Table_Name + '%' ) 
    
  7. ==============================

    7.모든 사람 : 포스트와 댓글 모두 감사합니다 좋은 있지만, 일부는 더 낫다.

    모든 사람 : 포스트와 댓글 모두 감사합니다 좋은 있지만, 일부는 더 낫다.

    이 필요한 단지 무엇을 제공하기 때문에 첫 번째 큰 스크립트는 좋다. 가장 빠르고 상세하게는 INFORMATION_SCHEMA.COLUMNS에서 선택하는 하나 개의 제안입니다 ..

    내 필요가 내가 스크립트 작업 아래 두 가지 중 하나 (아래 참조) 모두 내 버전을 만든 초에 상품을 제공, 거의 동일한 이름과 여러 데이터베이스 .. SOOO의 모든 잘못된 열을 찾는 것이 었습니다.

    이 링크의 다른 게시물에 가정은, 첫 번째 코드 예제가-각 데이터베이스, 나에게, 바람직하지 않다 성공적으로 사용될 수 있다는 것입니다. 이 정보는 특정 데이터베이스와 "fedb"의 단순한 사용 내에 있기 때문에, 단순히 액세스 권한을 부여하지 않는 올바른 결과를 생성하지 않습니다이다. 나는 데이터베이스를 수집하고,이 경우, 유틸리티 스크립트, 그것은 같은 좋은 사용하는 것입니다 오프 라인을있는 그 사람들을 무시 커서를 사용하는 이유 SOOO 그것입니다.

    결론, 나는 게시물의 모든 보정을 통합하고 다른 좋은 작품에서 두 개의 매우 설득력 스크립트가 무엇 만든 사람의 게시물을 읽을. 나는 아래에 모두 나열되고 또한이 링크에 액세스 할 수있는 OneDrive.com에서 내 공용 폴더에 스크립트 파일에 놓여있다 : http://1drv.ms/1vr8yNX

    즐겨 ! 행크 프리먼

    별도로 시도 ...

    ---------------------------
    --- 1st example (works) ---
    ---------------------------
    Declare 
     @DBName sysname
    ,@SQL_String1 nvarchar(4000)
    ,@SQL_String2 nvarchar(4000)
    ,@ColumnName nvarchar(200) 
    --set @ColumnName = 'Course_ID' 
    -------- Like Trick --------
    -- IF you want to add more the @ColumnName so it looks like Course_ID,CourseID
    -- then add an additional pairing of +''','''+'NewColumnSearchIDValue'
    ----------------------------
    set @ColumnName = 'Course_ID' +''','''+'CourseID'
    --select @ColumnName
    -----
    Declare @Column_Info table
    (
    [DatabaseName] nvarchar(128) NULL,
    [ColumnName] sysname NULL,
    [ObjectName] nvarchar(257) NOT NULL,
    [ObjectType] nvarchar(60) NULL,
    [DataType] nvarchar(151) NULL,
    [Nullable] varchar(8) NOT NULL,
    [MiscInfo] nvarchar(MAX) NOT NULL
    )
    --------------
    Begin
        set @SQL_String2 = 'SELECT
         DB_NAME() as ''DatabaseName'',
        s.name as ColumnName
            ,sh.name+''.''+o.name AS ObjectName
            ,o.type_desc AS ObjectType
            ,CASE
                 WHEN t.name IN (''char'',''varchar'') THEN t.name+''(''+CASE WHEN s.max_length<0 then ''MAX'' ELSE CONVERT(varchar(10),s.max_length) END+'')''
                 WHEN t.name IN (''nvarchar'',''nchar'') THEN t.name+''(''+CASE WHEN s.max_length<0 then ''MAX'' ELSE CONVERT(varchar(10),s.max_length/2) END+'')''
                WHEN t.name IN (''numeric'') THEN t.name+''(''+CONVERT(varchar(10),s.precision)+'',''+CONVERT(varchar(10),s.scale)+'')''
                 ELSE t.name
             END AS DataType
            ,CASE
                 WHEN s.is_nullable=1 THEN ''NULL''
                ELSE ''NOT NULL''
            END AS Nullable
            ,CASE
                 WHEN ic.column_id IS NULL THEN ''''
                 ELSE '' identity(''+ISNULL(CONVERT(varchar(10),ic.seed_value),'''')+'',''+ISNULL(CONVERT(varchar(10),ic.increment_value),'''')+'')=''+ISNULL(CONVERT(varchar(10),ic.last_value),''null'')
             END
            +CASE
                 WHEN sc.column_id IS NULL THEN ''''
                 ELSE '' computed(''+ISNULL(sc.definition,'''')+'')''
             END
            +CASE
                 WHEN cc.object_id IS NULL THEN ''''
                 ELSE '' check(''+ISNULL(cc.definition,'''')+'')''
             END
                AS MiscInfo
        into ##Temp_Column_Info
        FROM sys.columns                           s
            INNER JOIN sys.types                   t ON s.system_type_id=t.user_type_id and t.is_user_defined=0
            INNER JOIN sys.objects                 o ON s.object_id=o.object_id
            INNER JOIN sys.schemas                sh on o.schema_id=sh.schema_id
            LEFT OUTER JOIN sys.identity_columns  ic ON s.object_id=ic.object_id AND s.column_id=ic.column_id
            LEFT OUTER JOIN sys.computed_columns  sc ON s.object_id=sc.object_id AND s.column_id=sc.column_id
            LEFT OUTER JOIN sys.check_constraints cc ON s.object_id=cc.parent_object_id AND s.column_id=cc.parent_column_id
        --------------------------------------------
        --- DBA - Hank 12-Feb-2015 added this specific where statement
        --     where Upper(s.name) like ''COURSE%''
        --   where Upper(s.name) in (''' + @ColumnName + ''')
        --  where Upper(s.name) in (''cycle_Code'')
        -- ORDER BY sh.name+''.''+o.name,s.column_id
        order by 1,2'
    --------------------
        Declare DB_cursor CURSOR
        FOR 
             SELECT  name  FROM sys.databases 
            --select * from sys.databases 
            WHERE STATE = 0  
          --  and Name not IN ('master','msdb','tempdb','model','DocxPress')
            and Name not IN ('msdb','tempdb','model','DocxPress')
        Open DB_cursor
        Fetch next from DB_cursor into @DBName
        While @@FETCH_STATUS = 0
        begin 
            --select @DBName as '@DBName';
              Set @SQL_String1 = 'USE [' + @DBName + ']'
              set @SQL_String1 = @SQL_String1 + @SQL_String2
              EXEC sp_executesql @SQL_String1;
            --
            insert into @Column_Info
            select * from ##Temp_Column_Info;
            drop table ##Temp_Column_Info;
            Fetch next From DB_cursor into @DBName
        end
        CLOSE DB_cursor;
        Deallocate DB_cursor;
        ---
        select * from @Column_Info order by 2,3
    
    ----------------------------
    end
    ---------------------------
    
    Below is the Second script.. 
    ---------------------------
    --- 2nd example (works) ---
    ---------------------------
    -- This is by far the best/fastes of the lot for what it delivers.
    --Select * into dbo.hanktst From Master.INFORMATION_SCHEMA.COLUMNS
    --FileID: SCRIPT_Get_Column_info_(INFORMATION_SCHEMA.COLUMNS).sql
    ----------------------------------------
    --FileID: SCRIPT_Get_Column_info_(INFORMATION_SCHEMA.COLUMNS).sql
    -- Utility to find all columns in all databases or find specific with a like statement
    -- Look at this line to find a: --> set @SQL_String2 = ' select * into ##Temp_Column_Info....
    ----------------------------------------
    ---
    SET NOCOUNT ON
    begin 
     Declare @hanktst TABLE (
        [TABLE_CATALOG]              NVARCHAR(128) NULL
       ,[TABLE_SCHEMA]               NVARCHAR(128) NULL
       ,[TABLE_NAME]                 sysname NOT NULL
       ,[COLUMN_NAME]                sysname NULL
       ,[ORDINAL_POSITION]           INT NULL
       ,[COLUMN_DEFAULT]             NVARCHAR(4000) NULL
       ,[IS_NULLABLE]                VARCHAR(3) NULL
       ,[DATA_TYPE]                  NVARCHAR(128) NULL
       ,[CHARACTER_MAXIMUM_LENGTH]   INT NULL
       ,[CHARACTER_OCTET_LENGTH]     INT NULL
       ,[NUMERIC_PRECISION]          TINYINT NULL
       ,[NUMERIC_PRECISION_RADIX]    SMALLINT NULL
       ,[NUMERIC_SCALE]              INT NULL
       ,[DATETIME_PRECISION]         SMALLINT NULL
       ,[CHARACTER_SET_CATALOG]      sysname NULL
       ,[CHARACTER_SET_SCHEMA]       sysname NULL
       ,[CHARACTER_SET_NAME]         sysname NULL
       ,[COLLATION_CATALOG]          sysname NULL
       ,[COLLATION_SCHEMA]           sysname NULL
       ,[COLLATION_NAME]             sysname NULL
       ,[DOMAIN_CATALOG]             sysname NULL
       ,[DOMAIN_SCHEMA]              sysname NULL
       ,[DOMAIN_NAME]                sysname NULL
       )
           Declare 
          @DBName sysname
          ,@SQL_String2 nvarchar(4000)
          ,@TempRowCnt varchar(20)
          ,@Dbug bit = 0
          Declare DB_cursor CURSOR
          FOR 
               SELECT  name  FROM sys.databases 
              WHERE STATE = 0  
            --  and Name not IN ('master','msdb','tempdb','model','DocxPress')
              and Name not IN ('msdb','tempdb','model','DocxPress')
          Open DB_cursor
          Fetch next from DB_cursor into @DBName
          While @@FETCH_STATUS = 0
            begin 
            set @SQL_String2 = ' select * into ##Temp_Column_Info from [' + @DBName + '].INFORMATION_SCHEMA.COLUMNS 
            where UPPER(Column_Name) like ''COURSE%''
            ;'
              if @Dbug = 1  Select @SQL_String2 as '@SQL_String2';
              EXEC sp_executesql @SQL_String2;
              insert into @hanktst
              select * from ##Temp_Column_Info;
              drop table ##Temp_Column_Info;
             Fetch next From DB_cursor into @DBName
            end
            select * from @hanktst order by 4,2,3
          CLOSE DB_cursor;
          Deallocate DB_cursor;
          set @TempRowCnt = (select cast(count(1) as varchar(10)) from @hanktst )
           Print ('Rows found: '+ @TempRowCnt +'  end ...') 
    end   
    --------
    
  8. ==============================

    8.일부 사소한 개선

    일부 사소한 개선

    -> 이전의 대답은 모든 결과를 보여주는되지 않았다

    -> 칼럼 이름 필터 가능한 열 이름 변수를 설정하여

    DECLARE @columnname nvarchar(150)
    SET @columnname=''
    
    DECLARE @SQL varchar(max)
    SET @SQL=''
    SELECT @SQL=@SQL+'UNION
    select 
    '''+d.name+'.''+sh.name+''.''+o.name COLLATE SQL_Latin1_General_CP1_CI_AS as name,c.name COLLATE SQL_Latin1_General_CP1_CI_AS as columnname,c.column_id
    from '+d.name+'.sys.columns            c
        inner join '+d.name+'.sys.objects  o on c.object_id=o.object_id
        INNER JOIN '+d.name+'.sys.schemas  sh on o.schema_id=sh.schema_id
        where c.name like ''%'+@columnname+'%'' and sh.name<>''sys'' 
    '
    FROM sys.databases d
    SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
    --print @SQL
    EXEC (@SQL)
    
  9. ==============================

    9.아래의 쿼리를 시도

    아래의 쿼리를 시도

    DECLARE @Query VARCHAR(max) 
    SELECT @Query = 'USE ? SELECT ''?'' AS DataBaseName,
                                    sys.columns.name AS ColumnName  ,
                                    sys.tables.name  AS TableName   ,
                                    schema_name (sys.tables.schema_Id) AS schemaName
                             FROM sys.columns
                             JOIN sys.tables 
                  ON sys.columns.object_id = sys.tables.object_id
                  WHERE sys.columns.name = ''id'' '
    EXEC SP_MSFOREACHDB @Query
    

    모든 데이터베이스에서 ID 열을 포함하는 테이블의 목록을 제공합니다.

  10. ==============================

    10.난 그냥 다음 쿼리는 데이터베이스에 당신에게 테이블의 모든 열 이름을 줄 것이라는 점을 깨달았다 (SQL 서버 2017)

    난 그냥 다음 쿼리는 데이터베이스에 당신에게 테이블의 모든 열 이름을 줄 것이라는 점을 깨달았다 (SQL 서버 2017)

    SELECT DISTINCT NAME FROM SYSCOLUMNS 
    ORDER BY Name 
    

    또는 간단하게

    SELECT Name FROM SYSCOLUMNS
    

    당신은 중복 된 이름에 대해 걱정하지 마십시오.

    또 다른 옵션은 INFORMATION_SCHEMA에서 SELECT 열 이름입니다

    SELECT DISTINCT column_name  FROM INFORMATION_SCHEMA.COLUMNS
    ORDER BY column_name
    

    쿼리에서 열 이름 아래 수행 아니라 단지로 테이블 이름을 가지고하는 것이 더 재미있다.

    SELECT 
       Object_Name(Id) As TableName,
       Name As ColumnName
    FROM SysColumns
    

    그리고 그 결과는 같을 것이다

      TableName    ColumnName
    0    Table1    column11
    1    Table1    Column12
    2    Table2    Column21
    3    Table2    Column22
    4    Table3    Column23
    
  11. ==============================

    11.

    SELECT sys.columns.name AS ColumnName, tables.name AS TableName 
    FROM sys.columns 
         JOIN sys.tables ON sys.columns.object_id = tables.object_id
    
  12. ==============================

    12.내가 사용 :

    내가 사용 :

    EXEC sp_MSforeachdb 'Use ? Select * From INFORMATION_SCHEMA.COLUMNS '
    

    내가 필요한 것을 위해 작동하는 것 같다.

  13. ==============================

    13.자신의 DB 서버에 데이터 정렬 재미있어 누가 나 같은 사람들을위한 KM의 솔루션에 마이너 정제 ....

    자신의 DB 서버에 데이터 정렬 재미있어 누가 나 같은 사람들을위한 KM의 솔루션에 마이너 정제 ....

    DECLARE @SQL varchar(max)=''
    
    SELECT @SQL=@SQL+'UNION
    select 
    '''+d.name +'.''+sh.name+''.''+o.name COLLATE SQL_Latin1_General_CP1_CI_AS,c.name COLLATE SQL_Latin1_General_CP1_CI_AS,c.column_id
    from '+d.name +'.sys.columns            c
        inner join sys.objects  o on c.object_id=o.object_id
        INNER JOIN sys.schemas  sh on o.schema_id=sh.schema_id
    '
    FROM sys.databases d
    
    SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
    --print @SQL
    
    EXEC (@SQL)
    

    (그럼에도 불구하고 우리가보기에 랩 할 수있는이 작업을 수행 할 수있는 방법을 찾을 수 있다는 희망에 살고.)

  14. from https://stackoverflow.com/questions/2729126/how-to-find-column-names-for-all-tables-in-all-databases-in-sql-server by cc-by-sa and MIT license