복붙노트

[SQL] SQL 서버 쿼리는 데이터 유형, NOT NULL 및 PRIMARY KEY 제약 조건과 함께 테이블에 열 목록을 얻을 수 있습니다

SQL

SQL 서버 쿼리는 데이터 유형, NOT NULL 및 PRIMARY KEY 제약 조건과 함께 테이블에 열 목록을 얻을 수 있습니다

나는 특정 테이블에 열 목록을 얻기 위해 SQL 서버에 대한 쿼리를 작성해야, 관련 데이터 타입 (길이) 및 한 경우에는 null이되지 않습니다. 그리고 나는이 많은 일을 관리했다.

하지만 지금은 또한 열에 대해, 같은 테이블에, 얻을 필요 - TRUE 그 열이 기본 키의 경우.

이걸 어떻게해야합니까?

내 예상 출력은 다음과 같습니다

Column name | Data type | Length | isnull | Pk

해결법

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

    1.일부 열에 대한 중복 행을 방지하기 위해 사용하는 대신 system_type_id의 user_type_id.

    일부 열에 대한 중복 행을 방지하기 위해 사용하는 대신 system_type_id의 user_type_id.

    SELECT 
        c.name 'Column Name',
        t.Name 'Data type',
        c.max_length 'Max Length',
        c.precision ,
        c.scale ,
        c.is_nullable,
        ISNULL(i.is_primary_key, 0) 'Primary Key'
    FROM    
        sys.columns c
    INNER JOIN 
        sys.types t ON c.user_type_id = t.user_type_id
    LEFT OUTER JOIN 
        sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
    LEFT OUTER JOIN 
        sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    WHERE
        c.object_id = OBJECT_ID('YourTableName')
    

    그냥 실제 테이블 이름으로 YourTableName 교체 - 작품을 SQL Server 2005 및 최대를 위해.

    YourSchemaName 실제 스키마 이름이고 YourTableName 실제 테이블의 이름입니다 당신이 스키마를 사용하는 경우, YourSchemaName.YourTableName에 의해 YourTableName를 교체합니다.

  2. ==============================

    2.저장 프로 시저 sp_columns 반환 테이블 정보를 자세히.

    저장 프로 시저 sp_columns 반환 테이블 정보를 자세히.

    exec sp_columns MyTable
    
  3. ==============================

    3.당신은 쿼리를 사용할 수 있습니다 :

    당신은 쿼리를 사용할 수 있습니다 :

    select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, 
           NUMERIC_PRECISION, DATETIME_PRECISION, 
           IS_NULLABLE 
    from INFORMATION_SCHEMA.COLUMNS
    where TABLE_NAME='TableName'
    

    당신이 Pk의 정보를 제외하고 필요한 모든 메타 데이터를 얻을 수 있습니다.

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

    4.SQL 2012 년 당신은 사용할 수 있습니다 :

    SQL 2012 년 당신은 사용할 수 있습니다 :

    EXEC sp_describe_first_result_set N'SELECT * FROM [TableName]'
    

    이것은 그들의 특성과 함께 당신에게 열 이름을 제공 할 것입니다.

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

    5.이 시도:

    이 시도:

    select COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE 
    from INFORMATION_SCHEMA.COLUMNS IC
    where TABLE_NAME = 'tablename' and COLUMN_NAME = 'columnname'
    
  6. ==============================

    6.당신은 특별한 경우로 유니 코드 유형을 고려할 필요가 올바른 길이를 얻을 수 있도록합니다. 아래 코드를 참조하십시오.

    당신은 특별한 경우로 유니 코드 유형을 고려할 필요가 올바른 길이를 얻을 수 있도록합니다. 아래 코드를 참조하십시오.

    더 자세한 정보를 참조하십시오 : https://msdn.microsoft.com/en-us/library/ms176106.aspx

    SELECT 
       c.name 'Column Name',
       t.name,
       t.name +
       CASE WHEN t.name IN ('char', 'varchar','nchar','nvarchar') THEN '('+
    
                 CASE WHEN c.max_length=-1 THEN 'MAX'
    
                      ELSE CONVERT(VARCHAR(4),
    
                                   CASE WHEN t.name IN ('nchar','nvarchar')
    
                                   THEN  c.max_length/2 ELSE c.max_length END )
    
                      END +')'
    
              WHEN t.name IN ('decimal','numeric')
    
                      THEN '('+ CONVERT(VARCHAR(4),c.precision)+','
    
                              + CONVERT(VARCHAR(4),c.Scale)+')'
    
                      ELSE '' END
    
       as "DDL name",
       c.max_length 'Max Length in Bytes',
       c.precision ,
       c.scale ,
       c.is_nullable,
       ISNULL(i.is_primary_key, 0) 'Primary Key'
    FROM    
       sys.columns c
    INNER JOIN 
       sys.types t ON c.user_type_id = t.user_type_id
    LEFT OUTER JOIN 
       sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
    LEFT OUTER JOIN 
       sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    WHERE
       c.object_id = OBJECT_ID('YourTableName')
    
  7. ==============================

    7.알렉스의 대답에 확장, 당신은 PK 제약 조건을 얻기 위해이 작업을 수행 할 수 있습니다

    알렉스의 대답에 확장, 당신은 PK 제약 조건을 얻기 위해이 작업을 수행 할 수 있습니다

    Select C.COLUMN_NAME, C.DATA_TYPE, C.CHARACTER_MAXIMUM_LENGTH, C.NUMERIC_PRECISION, C.IS_NULLABLE, TC.CONSTRAINT_NAME
    From INFORMATION_SCHEMA.COLUMNS As C
        Left Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As TC
          On TC.TABLE_SCHEMA = C.TABLE_SCHEMA
              And TC.TABLE_NAME = C.TABLE_NAME
              And TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
    Where C.TABLE_NAME = 'Table'
    

    나는 당신이 주어진 열 대신 PK 제약 조건의 이름의 PK의 일부 경우 플래그가 결정하도록 놓친해야합니다. 당신이 사용할 것이라고 경우 :

    Select C.COLUMN_NAME, C.DATA_TYPE, C.CHARACTER_MAXIMUM_LENGTH
        , C.NUMERIC_PRECISION, C.NUMERIC_SCALE
        , C.IS_NULLABLE
        , Case When Z.CONSTRAINT_NAME Is Null Then 0 Else 1 End As IsPartOfPrimaryKey
    From INFORMATION_SCHEMA.COLUMNS As C
        Outer Apply (
                    Select CCU.CONSTRAINT_NAME
                    From INFORMATION_SCHEMA.TABLE_CONSTRAINTS As TC
                        Join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE As CCU
                            On CCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
                    Where TC.TABLE_SCHEMA = C.TABLE_SCHEMA
                        And TC.TABLE_NAME = C.TABLE_NAME
                        And TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
                        And CCU.COLUMN_NAME = C.COLUMN_NAME
                    ) As Z
    Where C.TABLE_NAME = 'Table'
    
  8. ==============================

    8.쿼리 편집기에서 테이블 이름은 이름과하고 Alt + F1을 선택 작성하고 그 테이블의 모든 정보를 가져올 것이다.

    쿼리 편집기에서 테이블 이름은 이름과하고 Alt + F1을 선택 작성하고 그 테이블의 모든 정보를 가져올 것이다.

  9. ==============================

    9.

    IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'Table')
          BEGIN
            SELECT COLS.COLUMN_NAME, COLS.DATA_TYPE, COLS.CHARACTER_MAXIMUM_LENGTH, 
                  (SELECT 'Yes' FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
                                  ON COLS.TABLE_NAME = TC.TABLE_NAME 
                                 AND TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
                                 AND KCU.TABLE_NAME = TC.TABLE_NAME
                                 AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
                                 AND KCU.COLUMN_NAME = COLS.COLUMN_NAME) AS KeyX
            FROM INFORMATION_SCHEMA.COLUMNS COLS WHERE TABLE_NAME = 'Table' ORDER BY KeyX DESC, COLUMN_NAME
          END
    
  10. ==============================

    10.반지로 다른 대답을 던지고, 이것은 당신에게 그 열 등을 제공합니다 :

    반지로 다른 대답을 던지고, 이것은 당신에게 그 열 등을 제공합니다 :

    SELECT col.TABLE_CATALOG AS [Database]
         , col.TABLE_SCHEMA AS Owner
         , col.TABLE_NAME AS TableName
         , col.COLUMN_NAME AS ColumnName
         , col.ORDINAL_POSITION AS OrdinalPosition
         , col.COLUMN_DEFAULT AS DefaultSetting
         , col.DATA_TYPE AS DataType
         , col.CHARACTER_MAXIMUM_LENGTH AS MaxLength
         , col.DATETIME_PRECISION AS DatePrecision
         , CAST(CASE col.IS_NULLABLE
                    WHEN 'NO' THEN 0
                    ELSE 1
                END AS bit)AS IsNullable
         , COLUMNPROPERTY(OBJECT_ID('[' + col.TABLE_SCHEMA + '].[' + col.TABLE_NAME + ']'), col.COLUMN_NAME, 'IsIdentity')AS IsIdentity
         , COLUMNPROPERTY(OBJECT_ID('[' + col.TABLE_SCHEMA + '].[' + col.TABLE_NAME + ']'), col.COLUMN_NAME, 'IsComputed')AS IsComputed
         , CAST(ISNULL(pk.is_primary_key, 0)AS bit)AS IsPrimaryKey
      FROM INFORMATION_SCHEMA.COLUMNS AS col
           LEFT JOIN(SELECT SCHEMA_NAME(o.schema_id)AS TABLE_SCHEMA
                          , o.name AS TABLE_NAME
                          , c.name AS COLUMN_NAME
                          , i.is_primary_key
                       FROM sys.indexes AS i JOIN sys.index_columns AS ic ON i.object_id = ic.object_id
                                                                         AND i.index_id = ic.index_id
                                             JOIN sys.objects AS o ON i.object_id = o.object_id
                                             LEFT JOIN sys.columns AS c ON ic.object_id = c.object_id
                                                                       AND c.column_id = ic.column_id
                      WHERE i.is_primary_key = 1)AS pk ON col.TABLE_NAME = pk.TABLE_NAME
                                                      AND col.TABLE_SCHEMA = pk.TABLE_SCHEMA
                                                      AND col.COLUMN_NAME = pk.COLUMN_NAME
     WHERE col.TABLE_NAME = 'YourTableName'
       AND col.TABLE_SCHEMA = 'dbo'
     ORDER BY col.TABLE_NAME, col.ORDINAL_POSITION;
    
  11. ==============================

    11.

    SELECT COLUMN_NAME, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM information_schema.columns WHERE table_name = '<name_of_table_or_view>'
    

    위의 문에서 실행 SELECT * 반품 INFORMATION_SCHEMA.COLUMNS 것을 볼 수 있습니다.

    이 질문은 이전에 대답하고있다 - https://stackoverflow.com/a/11268456/6169225

  12. ==============================

    12.나는 약간은 아무도 언급하지 놀랜다

    나는 약간은 아무도 언급하지 놀랜다

    sp_help 'mytable'
    
  13. ==============================

    13.

    select
          c.name as [column name], 
          t.name as [type name],
          tbl.name as [table name]
    from sys.columns c
             inner join sys.types t 
          on c.system_type_id = t.system_type_id 
             inner join sys.tables tbl
          on c.object_id = tbl.object_id
    where
          c.object_id = OBJECT_ID('YourTableName1') 
              and 
          t.name like '%YourSearchDataType%'
    union
    (select
          c.name as [column name], 
          t.name as [type name],
          tbl.name as [table name]
    from sys.columns c
             inner join sys.types t 
          on c.system_type_id = t.system_type_id 
             inner join sys.tables tbl
          on c.object_id = tbl.object_id
    where
          c.object_id = OBJECT_ID('YourTableName2') 
              and 
          t.name like '%YourSearchDataType%')
    union
    (select
          c.name as [column name], 
          t.name as [type name],
          tbl.name as [table name]
    from sys.columns c
             inner join sys.types t 
          on c.system_type_id = t.system_type_id 
             inner join sys.tables tbl
          on c.object_id = tbl.object_id
    where
          c.object_id = OBJECT_ID('YourTableName3') 
              and 
          t.name like '%YourSearchDataType%')
    order by tbl.name
    

    하나의 데이터베이스에 세 가지 다른 테이블에 대한 검색 데이터 유형에 따라 어떤 테이블에있는 열을 검색합니다. 이 쿼리는 'N'테이블로 확장됩니다.

  14. ==============================

    14.데이터 유형 및 길이에 대한 결과를 결합하여 "NULL"와 "하지 널 (null)"쿼리 아래의 사용의 형태로 널 (NULL) 찾을 수 있습니다.

    데이터 유형 및 길이에 대한 결과를 결합하여 "NULL"와 "하지 널 (null)"쿼리 아래의 사용의 형태로 널 (NULL) 찾을 수 있습니다.

    SELECT c.name AS 'Column Name',
           t.name + '(' + cast(c.max_length as varchar(50)) + ')' As 'DataType',
           case 
             WHEN  c.is_nullable = 0 then 'null' else 'not null'
             END AS 'Constraint'
      FROM sys.columns c
      JOIN sys.types t
        ON c.user_type_id = t.user_type_id
     WHERE c.object_id    = Object_id('TableName')
    

    아래 그림과 같이 당신은 결과를 찾을 수 있습니다.

    감사합니다.

  15. ==============================

    15.

    SELECT  
       T.NAME AS [TABLE NAME]
       ,C.NAME AS [COLUMN NAME]
       ,P.NAME AS [DATA TYPE]
       ,P.MAX_LENGTH AS [Max_SIZE]
       ,C.[max_length] AS [ActualSizeUsed]
       ,CAST(P.PRECISION AS VARCHAR) +'/'+ CAST(P.SCALE AS VARCHAR) AS [PRECISION/SCALE]
    FROM SYS.OBJECTS AS T
    JOIN SYS.COLUMNS AS C
        ON T.OBJECT_ID = C.OBJECT_ID
    JOIN SYS.TYPES AS P
        ON C.SYSTEM_TYPE_ID = P.SYSTEM_TYPE_ID
        AND C.[user_type_id] = P.[user_type_id]
    WHERE T.TYPE_DESC='USER_TABLE'
      AND T.name = 'InventoryStatus'
    ORDER BY 2
    
  16. ==============================

    16.

    주 : 일부 IDE SELECT N IS WORKING OR BEFORE, 일부 IDE N IS WORKING WITHOUT

  17. ==============================

    17.이 여기에 기본 키는 없지만,이 필드 이름 및 기본 필드 속성이있는 테이블 이름을 가지고있는 것처럼 다른 사용자가 도움이 될 수 있습니다

    이 여기에 기본 키는 없지만,이 필드 이름 및 기본 필드 속성이있는 테이블 이름을 가지고있는 것처럼 다른 사용자가 도움이 될 수 있습니다

    USE [**YourDB**]
    GO
    SELECT tbl.name, fld.[Column Name],fld.[Constraint],fld.DataType 
    FROM sys.all_objects as tbl left join 
    (SELECT c.OBJECT_ID,  c.name AS 'Column Name',
           t.name + '(' + cast(c.max_length as varchar(50)) + ')' As 'DataType',
           case 
             WHEN  c.is_nullable = 0 then 'null' else 'not null'
             END AS 'Constraint'
      FROM sys.columns c
      JOIN sys.types t
        ON c.user_type_id = t.user_type_id
    ) as fld on tbl.OBJECT_ID = fld.OBJECT_ID
    WHERE ( tbl.[type]='U' and tbl.[is_ms_shipped] = 0)
    ORDER BY tbl.[name],fld.[Column Name]
    GO
    
  18. ==============================

    18.난 그냥 "프리젠 테이션 준비"marc_s을했다 :

    난 그냥 "프리젠 테이션 준비"marc_s을했다 :

    SELECT 
        c.name 'Column Name',
        t.name 'Data type',
        IIF(t.name = 'nvarchar', c.max_length / 2, c.max_length) 'Max Length',
        c.precision 'Precision',
        c.scale 'Scale',
        IIF(c.is_nullable = 0, 'No', 'Yes') 'Nullable',
        IIF(ISNULL(i.is_primary_key, 0) = 0, 'No', 'Yes') 'Primary Key'
    FROM    
        sys.columns c
    INNER JOIN 
        sys.types t ON c.user_type_id = t.user_type_id
    LEFT OUTER JOIN 
        sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
    LEFT OUTER JOIN 
        sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
    WHERE
        c.object_id = OBJECT_ID('YourTableName')
    
  19. from https://stackoverflow.com/questions/2418527/sql-server-query-to-get-the-list-of-columns-in-a-table-along-with-data-types-no by cc-by-sa and MIT license