복붙노트

[SQL] MS SQL 서버 - 지정된 이름을 가진 열을 포함하는 모든 테이블을 찾기

SQL

MS SQL 서버 - 지정된 이름을 가진 열을 포함하는 모든 테이블을 찾기

그것은 열 것을 포함하는 테이블 이름을 조회하는 것이 가능

LIKE '%myName%'

?

해결법

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

    1.테이블 검색 :

    테이블 검색 :

    SELECT      c.name  AS 'ColumnName'
                ,t.name AS 'TableName'
    FROM        sys.columns c
    JOIN        sys.tables  t   ON c.object_id = t.object_id
    WHERE       c.name LIKE '%MyName%'
    ORDER BY    TableName
                ,ColumnName;
    

    테이블 및 뷰를 검색 :

    SELECT      COLUMN_NAME AS 'ColumnName'
                ,TABLE_NAME AS  'TableName'
    FROM        INFORMATION_SCHEMA.COLUMNS
    WHERE       COLUMN_NAME LIKE '%MyName%'
    ORDER BY    TableName
                ,ColumnName;
    
  2. ==============================

    2.우리는 또한 다음과 같은 구문을 사용할 수 있습니다 : -

    우리는 또한 다음과 같은 구문을 사용할 수 있습니다 : -

    select * from INFORMATION_SCHEMA.COLUMNS 
    where COLUMN_NAME like '%clientid%' 
    order by TABLE_NAME
    
  3. ==============================

    3.SQL 서버 :

    SQL 서버 :

    SELECT Table_Name, Column_Name 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_CATALOG = 'YOUR_DATABASE'
    AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
    

    신탁:

    SELECT owner, table_name, column_name 
    FROM all_tab_columns 
    WHERE column_name LIKE '%YOUR_COLUMN_NAME%'
    AND OWNER IN ('YOUR_SCHEMA_NAME');
    
  4. ==============================

    4.

    select  
            s.[name]            'Schema',
            t.[name]            'Table',
            c.[name]            'Column',
            d.[name]            'Data Type',
            c.[max_length]      'Length',
            d.[max_length]      'Max Length',
            d.[precision]       'Precision',
            c.[is_identity]     'Is Id',
            c.[is_nullable]     'Is Nullable',
            c.[is_computed]     'Is Computed',
            d.[is_user_defined] 'Is UserDefined',
            t.[modify_date]     'Date Modified',
            t.[create_date]     'Date created'
    from        sys.schemas s
    inner join  sys.tables  t
    on s.schema_id = t.schema_id
    inner join  sys.columns c
    on t.object_id = c.object_id
    inner join  sys.types   d
    on c.user_type_id = d.user_type_id
    where c.name like '%ColumnName%'
    

    이 여기에 당신이 나에 필터에 WHERE 절에 추가 조건을 사용하도록 선택하지 않을 수있는 스키마, 테이블과 열에 대한 약간의 추가 정보를 제공합니다. 예를 들어, 당신은 단지 원하는 경우 값이 추가되어 있어야하는 필드를 볼 수 있습니다

    and c.is_nullable = 0
    

    그것은 당신의 필요에 따라 재정렬, 삭제, 이름 변경 또는 추가 다른 사람에게 쉬웠다 있도록 다른 조건문을 추가 할 수 있습니다, 나는이 수직 방식으로 SELECT 절에 열을 추가했다. 다른 방법으로 당신은 T.Name를 사용하여 단지 테이블을 검색 할 수 있습니다. 매우 사용자 정의 할 수 있습니다.

    즐겨.

  5. ==============================

    5.이 작업을해야합니다 :

    이 작업을해야합니다 :

    SELECT name 
    FROM sysobjects 
    WHERE id IN ( SELECT id 
                  FROM syscolumns 
                  WHERE name like '%column_name%' )
    
  6. ==============================

    6.당신은 타사 도구에 더 많은 경우가 많은 옵션이 같은 :

    당신은 타사 도구에 더 많은 경우가 많은 옵션이 같은 :

    당신은 쉽게 이러한 사용하여 시스템 테이블을 검색 할 수 없기 때문에 이러한 경우 데이터베이스가 암호화 포함 개체 (뷰, 프로 시저, 함수) 매우 편리.

  7. ==============================

    7.난 당신이 sys.columns에 sys.table에 가입 ​​제안의 이유는 많은 모른다 당신은 단순히 코드 아래 사용할 수 있습니다 :

    난 당신이 sys.columns에 sys.table에 가입 ​​제안의 이유는 많은 모른다 당신은 단순히 코드 아래 사용할 수 있습니다 :

    같은 TABLENAME, * SYS.columns에서 어디에 이름 LIKE '% MyName로 %'OBJECT_NAME (OBJECT_ID)을 선택

    또는

    당신은뿐만 아니라 스키마 이름을 원하는 경우 :

    Select * from  INFORMATION_SCHEMA.COLUMNS
    where COLUMN_NAME LIKE '%MyName%'
    
  8. ==============================

    8.당신은 단순히 테이블 이름을 원하는 경우에 당신은 실행할 수 있습니다 :

    당신은 단순히 테이블 이름을 원하는 경우에 당신은 실행할 수 있습니다 :

    select object_name(object_id) from sys.columns
    where name like '%received_at%'
    

    당신은뿐만 아니라 스키마 이름을 원하는 경우 (이 서로 다른 스키마를 많이해야하고,하지 않는 한 데이터베이스의 모든 테이블을 기억하고 자신이 속한 곳이 유용 할 수 있습니다 당신이 것입니다 경우, 많은에서) 실행 :

    select OBJECT_SCHEMA_NAME(object_id),object_name(object_id) from sys.columns
    where name like '%received_at%'
    

    그리고 마지막으로 (이것은 제 생각에는 코드가 () 너무 쉽게 쓰기에 복잡지고있는 곳입니다하지만) 당신은 더 좋은 형식으로 원하는 경우 :

    select concat(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) from sys.columns
    where name like '%received_at%'
    

    당신은 또한 내가 무엇을 기반으로하는 함수를 만들 수 있습니다 :

    CREATE PROCEDURE usp_tablecheck
    --Scan through all tables to identify all tables with columns that have the provided string
    --Stephen B
    @name nvarchar(200)
    AS
    SELECT CONCAT(OBJECT_SCHEMA_NAME(object_id),'.',object_name(object_id)) AS [Table Name], name AS [Column] FROM sys.columns
    WHERE name LIKE CONCAT('%',@name,'%')
    ORDER BY [Table Name] ASC, [Column] ASC
    GO
    

    그것은 CONCAT 기능은 CONCATENATE 문자열에 2008R2 및 이전 버전을 사용 +를 들어 2012 년에 추가 된 것을 주목할 필요가있다.

    나는이 게시 된 이후로는 시저에게 비트를 다시 포맷했습니다. 그것은 좀 더 지금 고급입니다하지만 많이 지저분 보이는 (그러나 당신이 그것을 볼 수 없을거야 그래서는 PROC에서의)와 더 나은 포맷입니다.

    이 버전은 관리 데이터베이스에있는 다음 데이터베이스를 검색 할 수 있습니다. 기본 데이터베이스 (: 당신은 + 연산자를 사용하여 문자열 연결을 2012+에서만 작동이 변경됩니다 않는 한 CONCAT () 함수를 사용하여 주)가되고 싶어요 중에 '마스터'에서 @db의 decleration을 변경합니다.

    CREATE PROCEDURE [dbo].[usp_tablecheck]
        --Scan through all tables to identify all tables in the specified database with columns that have the provided string
        --Stephen B
        @name nvarchar(200)
        ,@db nvarchar(200) = 'master'
    AS
        DECLARE @sql nvarchar(4000) = CONCAT('
            SELECT concat(OBJECT_SCHEMA_NAME(col.object_id,DB_ID(''',@db,''')),''.'',object_name(col.object_id,DB_ID(''',@db,'''))) AS [Table Name]
                ,col.name AS [Column] 
            FROM ',@db,'.sys.columns col
            LEFT JOIN ',@db,'.sys.objects ob 
                ON ob.object_id = col.object_id
            WHERE 
                col.name LIKE CONCAT(''%'',''',@name,''',''%'') 
                AND ob.type =''U''
            ORDER BY [Table Name] ASC
                ,[Column] ASC')
        EXECUTE (@sql)
    GO
    
  9. ==============================

    9.

    USE AdventureWorks
    
    GO
    
    SELECT t.name AS table_name, SCHEMA_NAME(schema_id) AS schema_name,
     c.name AS column_name
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    WHERE c.name LIKE '%EmployeeID%'
    ORDER BY schema_name, table_name; 
    

    그것은 PINAL 선생님 블로그에서입니다

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

    10.

    SELECT COLUMN_NAME, TABLE_NAME
      FROM INFORMATION_SCHEMA.COLUMNS    
     WHERE COLUMN_NAME LIKE '%myName%'
    
  11. ==============================

    11.당신은 COLUMN_NAME 필터에 의해 INFORMATION_SCHEMA.COLUMNS에서 찾을 수 있습니다

    당신은 COLUMN_NAME 필터에 의해 INFORMATION_SCHEMA.COLUMNS에서 찾을 수 있습니다

    Select DISTINCT TABLE_NAME as TableName,COLUMN_NAME as ColumnName
         From INFORMATION_SCHEMA.COLUMNS Where column_name like '%myname%'
    
  12. ==============================

    12.

    SELECT  [TABLE_NAME] ,
            [INFORMATION_SCHEMA].COLUMNS.COLUMN_NAME
    FROM    INFORMATION_SCHEMA.COLUMNS
    WHERE   INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME LIKE '%NAME%' ;
    
  13. ==============================

    13.쿼리를 다음 당신에게 '%의 MyName로'와 같은 데이터베이스를 갖는 필드 이름의 정확한 테이블 이름을 제공 할 것입니다.

    쿼리를 다음 당신에게 '%의 MyName로'와 같은 데이터베이스를 갖는 필드 이름의 정확한 테이블 이름을 제공 할 것입니다.

    SELECT distinct(TABLE_NAME)
      FROM INFORMATION_SCHEMA.COLUMNS    
     WHERE COLUMN_NAME LIKE '%myName%'
    
  14. ==============================

    14.뿐만 아니라 테이블의 스키마로 열 이름, 테이블 이름 .. : 전체 정보를 얻으려면

    뿐만 아니라 테이블의 스키마로 열 이름, 테이블 이름 .. : 전체 정보를 얻으려면

    SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME LIKE '%col_Name%'
    
  15. ==============================

    15.난 그냥 그것을 시도하고이 완벽하게 작동

    난 그냥 그것을 시도하고이 완벽하게 작동

    USE YourDatabseName
    GO
    SELECT t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    WHERE c.name LIKE '%YourColumnName%'
    ORDER BY schema_name, table_name;
    

    그대로 만하면 나머지 찾고있는 당신의 열 이름에 데이터베이스 및 YourcolumnName에 YourDatbaseName 변경은 보관하십시오.

    이 도움이 되었기를 바랍니다

  16. ==============================

    16.

    DECLARE @columnName as varchar(100)
    SET @columnName = 'ColumnName'
    
    SELECT t.name AS Table, c.name AS Column,
    ty.name AS Type, c.max_length AS Length
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
    WHERE c.name LIKE @columnName
    ORDER BY t.name, c.name
    
  17. ==============================

    17.나는 같은 목적을 위해 이것을 사용하고는했다 :

    나는 같은 목적을 위해 이것을 사용하고는했다 :

      select * from INFORMATION_SCHEMA.COLUMNS
      where TABLE_CATALOG= 'theDatabase'
      and COLUMN_NAME like 'theCol%'
    
  18. ==============================

    18.희망이 중복 답변을하지 않습니다,하지만 내가 좋아하는 것은 보통의 나를 (나는 그 필드 이름 (뿐만 아니라 테이블을 찾고 값을 검색 할 수 있도록 SQL 문 내에서 SQL 문을 생성하는 것입니다 나 그때)을 찾고 열 이름의 ID에 관련된 정보를 필요한 삭제를 위해 :

    희망이 중복 답변을하지 않습니다,하지만 내가 좋아하는 것은 보통의 나를 (나는 그 필드 이름 (뿐만 아니라 테이블을 찾고 값을 검색 할 수 있도록 SQL 문 내에서 SQL 문을 생성하는 것입니다 나 그때)을 찾고 열 이름의 ID에 관련된 정보를 필요한 삭제를 위해 :

      SELECT  'Select * from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
      FROM sys.columns c, c.name as ColName, t.name as TableName
      JOIN sys.tables t 
         ON c.object_id = t.object_id
      WHERE c.name LIKE '%ProjectID%'
    

    그럼 복사 할 수 있습니다 내 1 열 "SQLToRun"를 실행 붙여 넣기 ... 그때 '에서 삭제'와 '에서 "선택 *를 교체하고 그것은 나를 그 주어진 ID에 대한 참조를 삭제할 수 있습니다! 당신이 그렇게 파일에 결과를 기록 단지의 경우를 가지고있다.

    참고 **** 당신이 당신의 당신의 삭제 문을 실행하기 전에 어떤 bakup 테이블을 제거합니다 ...

      SELECT  'Delete from ' + t.name + ' where ' + c.name + ' = 148' AS SQLToRun
      FROM sys.columns c, c.name as ColName, t.name as TableName
      JOIN sys.tables t 
         ON c.object_id = t.object_id
      WHERE c.name LIKE '%ProjectID%'
    
  19. ==============================

    19.

    SELECT t.name AS table_name, 
        SCHEMA_NAME(schema_id) AS schema_name,
        c.name AS column_name
    FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    WHERE c.name LIKE '%Label%'
    ORDER BY schema_name, table_name;
    
  20. ==============================

    20.오라클처럼이있는 테이블과 열을 찾을 수 있습니다 :

    오라클처럼이있는 테이블과 열을 찾을 수 있습니다 :

    select table_name, column_name
    from user_tab_columns 
    where column_name 
    like '%myname%';
    
  21. ==============================

    21.나뿐만 아니라 조회수를 포함 한 이상 그냥 대답을 개선하고 연접 스키마 및 테이블 /보기 함께 결과가 더 분명하게.

    나뿐만 아니라 조회수를 포함 한 이상 그냥 대답을 개선하고 연접 스키마 및 테이블 /보기 함께 결과가 더 분명하게.

    DECLARE @COLUMNNAME AS VARCHAR(100);
    
    SET @COLUMNNAME = '%Absence%';
    
    SELECT CASE
               WHEN [T].[NAME] IS NULL
               THEN 'View'
               WHEN [T].[NAME] = ''
               THEN 'View'
               ELSE 'Table'
           END AS [TYPE], '[' + [S].[NAME] + '].' + '[' + CASE
                                                              WHEN [T].[NAME] IS NULL
                                                              THEN [V].[NAME]
                                                              WHEN [T].[NAME] = ''
                                                              THEN [V].[NAME]
                                                              ELSE [T].[NAME]
                                                          END + ']' AS [TABLE], [C].[NAME] AS [COLUMN]
    FROM [SYS].[SCHEMAS] AS [S] LEFT JOIN [SYS].[TABLES] AS [T] ON [S].SCHEMA_ID = [T].SCHEMA_ID
                                LEFT JOIN [SYS].[VIEWS] AS [V] ON [S].SCHEMA_ID = [V].SCHEMA_ID
                                INNER JOIN [SYS].[COLUMNS] AS [C] ON [T].OBJECT_ID = [C].OBJECT_ID
                                                                     OR
                                                                     [V].OBJECT_ID = [C].OBJECT_ID
                                INNER JOIN [SYS].[TYPES] AS [TY] ON [C].[SYSTEM_TYPE_ID] = [TY].[SYSTEM_TYPE_ID]
    WHERE [C].[NAME] LIKE @COLUMNNAME
    GROUP BY '[' + [S].[NAME] + '].' + '[' + CASE
                                                 WHEN [T].[NAME] IS NULL
                                                 THEN [V].[NAME]
                                                 WHEN [T].[NAME] = ''
                                                 THEN [V].[NAME]
                                                 ELSE [T].[NAME]
                                             END + ']', [T].[NAME], [C].[NAME], [S].[NAME]
    ORDER BY '[' + [S].[NAME] + '].' + '[' + CASE
                                                 WHEN [T].[NAME] IS NULL
                                                 THEN [V].[NAME]
                                                 WHEN [T].[NAME] = ''
                                                 THEN [V].[NAME]
                                                 ELSE [T].[NAME]
                                             END + ']', CASE
                                                            WHEN [T].[NAME] IS NULL
                                                            THEN 'View'
                                                            WHEN [T].[NAME] = ''
                                                            THEN 'View'
                                                            ELSE 'Table'
                                                        END, [T].[NAME], [C].[NAME];
    
  22. ==============================

    22.이 쿼리를 시도 할 수 있습니다 :

    이 쿼리를 시도 할 수 있습니다 :

    USE AdventureWorks
    GO
    SELECT t.name AS table_name,
    SCHEMA_NAME(schema_id) AS schema_name,
    c.name AS column_name
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
    WHERE c.name LIKE '%myName%'
    
  23. ==============================

    23.

    Create table #yourcolumndetails(
    DBaseName varchar(100), 
    TableSchema varchar(50), 
    TableName varchar(100),
    ColumnName varchar(100), 
    DataType varchar(100), 
    CharMaxLength varchar(100))
    
    EXEC sp_MSForEachDB @command1='USE [?];
        INSERT INTO #yourcolumndetails SELECT
        Table_Catalog
        ,Table_Schema
        ,Table_Name
        ,Column_Name
        ,Data_Type
        ,Character_Maximum_Length
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE COLUMN_NAME like ''origin'''
    
    select * from #yourcolumndetails
    Drop table #yourcolumndetails
    
  24. ==============================

    24.나는 내 눈을 피하지 않았다 테이블과 뷰에 대한 뭔가를 원했다.

    나는 내 눈을 피하지 않았다 테이블과 뷰에 대한 뭔가를 원했다.

    질문

    SELECT
        t.TABLE_TYPE AS [Type],
        c.TABLE_NAME AS [Object],
        c.COLUMN_NAME AS [Column]
    FROM
        INFORMATION_SCHEMA.COLUMNS AS c
        LEFT JOIN INFORMATION_SCHEMA.TABLES AS t ON
            t.TABLE_CATALOG = c.TABLE_CATALOG AND 
            t.TABLE_SCHEMA = c.TABLE_SCHEMA AND
            t.TABLE_NAME = c.TABLE_NAME
    WHERE
        c.COLUMN_NAME LIKE '%myName%'
    ORDER BY
        [Type],
        [Object],
        [Column]
    

    결과

    Type        Object   Column
    ----------------------------
    BASE TABLE  Table1   myName1
    BASE TABLE  Table2   myName2
    VIEW        View1    myName1
    VIEW        View2    myName2
    
  25. ==============================

    25.다음은 사이베이스 데이터베이스에 대한 작업 솔루션입니다

    다음은 사이베이스 데이터베이스에 대한 작업 솔루션입니다

    select 
      t.table_name, 
      c.column_name 
    from 
      systab as t key join systabcol as c 
    where 
       c.column_name = 'MyColumnName'
    
  26. ==============================

    26.우리는 목적을 위해 sp_columns를 사용할 수 있습니다.

    우리는 목적을 위해 sp_columns를 사용할 수 있습니다.

    sp_columns 'table name', null, null, '%column name%'
    
  27. ==============================

    27.열 이름을 지정한 모든 테이블을 표시하는 SQL 쿼리 :

    열 이름을 지정한 모든 테이블을 표시하는 SQL 쿼리 :

    SELECT SCHEMA_NAME(schema_id) + '.' + t.name AS 'Table Name'
      FROM sys.tables t
     INNER JOIN sys.columns c ON c.object_id = t.object_id
     WHERE c.name like '%ColumnName%'
     ORDER BY 'Table Name'
    
  28. ==============================

    28.여기에 귀하의 질문에 대한 대답은

    여기에 귀하의 질문에 대한 대답은

    SELECT c.name AS ColumnName, t.name AS TableName
    FROM sys.columns c
        JOIN sys.tables t ON c.object_id = t.object_id
    WHERE c.name LIKE '%myName%';
    
  29. from https://stackoverflow.com/questions/4849652/find-all-tables-containing-column-with-specified-name-ms-sql-server by cc-by-sa and MIT license