복붙노트

[SQL] 당신은 어떻게 SQL Server 테이블의 기본 키를 나열합니까?

SQL

당신은 어떻게 SQL Server 테이블의 기본 키를 나열합니까?

간단한 질문, 당신은 어떻게 T-SQL과 테이블의 기본 키를 나열합니까? 나는 테이블에 인덱스를 얻을하는 방법을 알고 있지만, PK를 얻는 방법을 기억할 수 없습니다.

해결법

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

    1.

    SELECT Col.Column_Name from 
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
        INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
    WHERE 
        Col.Constraint_Name = Tab.Constraint_Name
        AND Col.Table_Name = Tab.Table_Name
        AND Constraint_Type = 'PRIMARY KEY'
        AND Col.Table_Name = '<your table name>'
    
  2. ==============================

    2.일반적으로 SYS를 사용하는 지금 연습을 권장합니다. * SQL Server의 INFORMATION_SCHEMA 전망을하므로하지 않는있는 거 계획 내가 사람들을 사용하는 것이 데이터베이스를 마이그레이션에. 다음은 SYS와 함께 할 것입니다 방법 * 뷰. :

    일반적으로 SYS를 사용하는 지금 연습을 권장합니다. * SQL Server의 INFORMATION_SCHEMA 전망을하므로하지 않는있는 거 계획 내가 사람들을 사용하는 것이 데이터베이스를 마이그레이션에. 다음은 SYS와 함께 할 것입니다 방법 * 뷰. :

    SELECT 
        c.name AS column_name,
        i.name AS index_name,
        c.is_identity
    FROM sys.indexes i
        inner join sys.index_columns ic  ON i.object_id = ic.object_id AND i.index_id = ic.index_id
        inner join sys.columns c ON ic.object_id = c.object_id AND c.column_id = ic.column_id
    WHERE i.is_primary_key = 1
        and i.object_ID = OBJECT_ID('<schema>.<tablename>');
    
  3. ==============================

    3.이것은 단지 SYS-테이블을 사용하는 솔루션입니다.

    이것은 단지 SYS-테이블을 사용하는 솔루션입니다.

    이 데이터베이스의 모든 기본 키를 나열합니다. 이 스키마, 테이블 이름, 열 이름 및 각 기본 키에 대한 올바른 열 정렬 순서를 반환합니다.

    특정 테이블에 대한 기본 키를 얻고 싶은 경우에, 당신은 스키마 명 및 TABLENAME에 필터가 필요합니다.

    IMHO,이 솔루션은 매우 일반적이며 어떤 시스템에서 실행됩니다, 그래서 모든 문자열 리터럴을 사용하지 않습니다.

    select 
        s.name as SchemaName,
        t.name as TableName,
        tc.name as ColumnName,
        ic.key_ordinal as KeyOrderNr
    from 
        sys.schemas s 
        inner join sys.tables t   on s.schema_id=t.schema_id
        inner join sys.indexes i  on t.object_id=i.object_id
        inner join sys.index_columns ic on i.object_id=ic.object_id 
                                       and i.index_id=ic.index_id
        inner join sys.columns tc on ic.object_id=tc.object_id 
                                 and ic.column_id=tc.column_id
    where i.is_primary_key=1 
    order by t.name, ic.key_ordinal ;
    
  4. ==============================

    4.여기에 SQL 쿼리를 사용하여 질문 GET 테이블의 기본 키에서 다른 방법이있다 :

    여기에 SQL 쿼리를 사용하여 질문 GET 테이블의 기본 키에서 다른 방법이있다 :

    SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA+'.'+CONSTRAINT_NAME), 'IsPrimaryKey') = 1
      AND TABLE_NAME = '<your table name>'
    

    그것은 주어진 테이블에 대한 제약 조건을 결정하기 위해 KEY_COLUMN_USAGE를 사용 각 기본 키인지 확인 OBJECTPROPERTY (ID 'IsPrimaryKey')을 사용하여

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

    5.나는 INFORMATION_SCHEMA 기술을 좋아하지만 내가 사용했던 또 다른입니다 : 간부 sp_pkeys '테이블'

    나는 INFORMATION_SCHEMA 기술을 좋아하지만 내가 사용했던 또 다른입니다 : 간부 sp_pkeys '테이블'

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

    6.다음 작업을 수행 할 수 있습니다 MS SQL 서버를 사용하고 있습니다 :

    다음 작업을 수행 할 수 있습니다 MS SQL 서버를 사용하고 있습니다 :

    --List all tables primary keys
    select * from information_schema.table_constraints
    where constraint_type = 'Primary Key'
    

    특정 테이블을 원한다면 당신은 또한 TABLE_NAME 열을 필터링 할 수 있습니다.

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

    7.--This 다른도 협력 관련 쿼리에 대한 예입니다 버전을 수정한다

    --This 다른도 협력 관련 쿼리에 대한 예입니다 버전을 수정한다

    SELECT TC.TABLE_NAME as [Table_name], TC.CONSTRAINT_NAME as [Primary_Key]
     FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
     INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU
     ON TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
     WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND
     TC.TABLE_NAME IN
     (SELECT [NAME] AS [TABLE_NAME] FROM SYS.OBJECTS 
     WHERE TYPE = 'U')
    
  8. ==============================

    8.이 모든 제약 (기본 키와 외래 키) 및 쿼리 넣어 테이블 이름의 끝을 표시한다

    이 모든 제약 (기본 키와 외래 키) 및 쿼리 넣어 테이블 이름의 끝을 표시한다

    /* CAST IS DONE , SO THAT OUTPUT INTEXT FILE REMAINS WITH SCREEN LIMIT*/
    WITH   ALL_KEYS_IN_TABLE (CONSTRAINT_NAME,CONSTRAINT_TYPE,PARENT_TABLE_NAME,PARENT_COL_NAME,PARENT_COL_NAME_DATA_TYPE,REFERENCE_TABLE_NAME,REFERENCE_COL_NAME) 
    AS
    (
    SELECT  CONSTRAINT_NAME= CAST (PKnUKEY.name AS VARCHAR(30)) ,
            CONSTRAINT_TYPE=CAST (PKnUKEY.type_desc AS VARCHAR(30)) ,
            PARENT_TABLE_NAME=CAST (PKnUTable.name AS VARCHAR(30)) ,
            PARENT_COL_NAME=CAST ( PKnUKEYCol.name AS VARCHAR(30)) ,
            PARENT_COL_NAME_DATA_TYPE=  oParentColDtl.DATA_TYPE,        
            REFERENCE_TABLE_NAME='' ,
            REFERENCE_COL_NAME='' 
    
    FROM sys.key_constraints as PKnUKEY
        INNER JOIN sys.tables as PKnUTable
                ON PKnUTable.object_id = PKnUKEY.parent_object_id
        INNER JOIN sys.index_columns as PKnUColIdx
                ON PKnUColIdx.object_id = PKnUTable.object_id
                AND PKnUColIdx.index_id = PKnUKEY.unique_index_id
        INNER JOIN sys.columns as PKnUKEYCol
                ON PKnUKEYCol.object_id = PKnUTable.object_id
                AND PKnUKEYCol.column_id = PKnUColIdx.column_id
         INNER JOIN INFORMATION_SCHEMA.COLUMNS oParentColDtl
                ON oParentColDtl.TABLE_NAME=PKnUTable.name
                AND oParentColDtl.COLUMN_NAME=PKnUKEYCol.name
    UNION ALL
    SELECT  CONSTRAINT_NAME= CAST (oConstraint.name AS VARCHAR(30)) ,
            CONSTRAINT_TYPE='FK',
            PARENT_TABLE_NAME=CAST (oParent.name AS VARCHAR(30)) ,
            PARENT_COL_NAME=CAST ( oParentCol.name AS VARCHAR(30)) ,
            PARENT_COL_NAME_DATA_TYPE= oParentColDtl.DATA_TYPE,     
            REFERENCE_TABLE_NAME=CAST ( oReference.name AS VARCHAR(30)) ,
            REFERENCE_COL_NAME=CAST (oReferenceCol.name AS VARCHAR(30)) 
    FROM sys.foreign_key_columns FKC
        INNER JOIN sys.sysobjects oConstraint
                ON FKC.constraint_object_id=oConstraint.id 
        INNER JOIN sys.sysobjects oParent
                ON FKC.parent_object_id=oParent.id
        INNER JOIN sys.all_columns oParentCol
                ON FKC.parent_object_id=oParentCol.object_id /* ID of the object to which this column belongs.*/
                AND FKC.parent_column_id=oParentCol.column_id/* ID of the column. Is unique within the object.Column IDs might not be sequential.*/
        INNER JOIN sys.sysobjects oReference
                ON FKC.referenced_object_id=oReference.id
        INNER JOIN INFORMATION_SCHEMA.COLUMNS oParentColDtl
                ON oParentColDtl.TABLE_NAME=oParent.name
                AND oParentColDtl.COLUMN_NAME=oParentCol.name
        INNER JOIN sys.all_columns oReferenceCol
                ON FKC.referenced_object_id=oReferenceCol.object_id /* ID of the object to which this column belongs.*/
                AND FKC.referenced_column_id=oReferenceCol.column_id/* ID of the column. Is unique within the object.Column IDs might not be sequential.*/
    
    )
    
    select * from   ALL_KEYS_IN_TABLE
    where   
        PARENT_TABLE_NAME  in ('YOUR_TABLE_NAME') 
        or REFERENCE_TABLE_NAME  in ('YOUR_TABLE_NAME')
    ORDER BY PARENT_TABLE_NAME,CONSTRAINT_NAME;
    

    http://blogs.msdn.com/b/sqltips/archive/2005/09/16/469136.aspx - 참고 통해 읽어 주시기 바랍니다

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

    9.감사합니다 남자입니다.

    감사합니다 남자입니다.

    약간의 변형으로 나는 모든 테이블의 모든 기본 키를 찾기 위해 그것을 사용.

    SELECT A.Name,Col.Column_Name from 
        INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
        INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col ,
        (select NAME from dbo.sysobjects where xtype='u') AS A
    WHERE 
        Col.Constraint_Name = Tab.Constraint_Name
        AND Col.Table_Name = Tab.Table_Name
        AND Constraint_Type = 'PRIMARY KEY '
        AND Col.Table_Name = A.Name
    
  10. ==============================

    10.

    SELECT A.TABLE_NAME as [Table_name], A.CONSTRAINT_NAME as [Primary_Key]
     FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS A, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE B
     WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
    
  11. ==============================

    11.

    SELECT t.name AS 'table', i.name AS 'index', it.xtype,
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 1 
            AND k.id = t.id)
        AS 'column1',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 2 
            AND k.id = t.id)
        AS 'column2',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 3
            AND k.id = t.id)
        AS 'column3',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 4
            AND k.id = t.id)
        AS 'column4',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 5
            AND k.id = t.id)
        AS 'column5',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 6
            AND k.id = t.id)
        AS 'column6',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 7
            AND k.id = t.id)
        AS 'column7',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 8 
            AND k.id = t.id)
        AS 'column8',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 9 
            AND k.id = t.id)
        AS 'column9',
    
    (SELECT c.name FROM syscolumns c INNER JOIN sysindexkeys k 
        ON k.indid = i.indid 
            AND c.colid = k.colid 
            AND c.id = t.id 
            AND k.keyno = 10
            AND k.id = t.id)
        AS 'column10',
    
    FROM sysobjects t
        INNER JOIN sysindexes i ON i.id = t.id 
        INNER JOIN sysobjects it ON it.parent_obj = t.id AND it.name = i.name
    
    WHERE it.xtype = 'PK'
    ORDER BY t.name, i.name
    
  12. ==============================

    12.이 사람은 당신에게 PK를있는 열을 제공합니다.

    이 사람은 당신에게 PK를있는 열을 제공합니다.

    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'TableName'
    
  13. ==============================

    13.시스템 저장 프로 시저 sp_help는 당신에게 정보를 제공 할 것입니다. 다음 문을 실행합니다 :

    시스템 저장 프로 시저 sp_help는 당신에게 정보를 제공 할 것입니다. 다음 문을 실행합니다 :

    execute sp_help table_name
    
  14. ==============================

    14.쿼리 아래의 특정 테이블의 기본 키를 나열합니다 :

    쿼리 아래의 특정 테이블의 기본 키를 나열합니다 :

    SELECT DISTINCT
        CONSTRAINT_NAME AS [Constraint],
        TABLE_SCHEMA AS [Schema],
        TABLE_NAME AS TableName
    FROM
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE
        TABLE_NAME = 'mytablename'
    
  15. ==============================

    15.내가 따라 간단한 테크닉을 말하고

    내가 따라 간단한 테크닉을 말하고

    SP_HELP 'table_name'
    

    쿼리와이 코드를 실행합니다. 당신은 기본 키 (작은 따옴표를 잊지 마세요) 알고 싶어하는 테이블 _의 장소에서 테이블 이름을 언급. 결과는 첨부 된 이미지처럼 표시됩니다. 그것은 당신을 도울 것입니다 희망

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

    16.이것을를 사용 해보세요 :

    이것을를 사용 해보세요 :

    SELECT
        CONSTRAINT_CATALOG AS DataBaseName,
        CONSTRAINT_SCHEMA AS SchemaName,
        TABLE_NAME AS TableName,
        CONSTRAINT_Name AS PrimaryKey
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
    WHERE CONSTRAINT_TYPE = 'Primary Key' and Table_Name = 'YourTable'
    
  17. ==============================

    17.이 버전의 디스플레이 스키마, 테이블 이름과 순서, 쉼표는 기본 키의 목록을 분리했다. 테이블 이름으로 우리가 필터 있도록 OBJECT_ID ()는 링크 서버에서 작동하지 않습니다.

    이 버전의 디스플레이 스키마, 테이블 이름과 순서, 쉼표는 기본 키의 목록을 분리했다. 테이블 이름으로 우리가 필터 있도록 OBJECT_ID ()는 링크 서버에서 작동하지 않습니다.

    (가) (Si1.Column_Name를, '', '') 교체없이 내가가 테스트 된 데이터베이스 COLUMN_NAME에 대한 XML 개폐 태그를 보여줄 것입니다. 나는 누군가가 다음 해주십시오 코멘트를 알 수 있도록하는 경우 데이터베이스가이 'COLUMN_NAME'에 대한 대체 요구하지 않도록하는 이유입니다.

    DECLARE @TableName VARCHAR(100) = '';
    WITH Sysinfo
        AS (SELECT Kcu.Table_Name
                , Kcu.Table_Schema AS Schema_Name
                , Kcu.Column_Name
                , Kcu.Ordinal_Position
            FROM   [LinkServer].Information_Schema.Key_Column_Usage Kcu
                 JOIN [LinkServer].Information_Schema.Table_Constraints AS Tc ON Tc.Constraint_Name = Kcu.Constraint_Name
            WHERE  Tc.Constraint_Type = 'Primary Key')
        SELECT           Schema_Name
                        ,Table_Name
                        , STUFF(
                              (
                                 SELECT ', '
                                     , REPLACE(Si1.Column_Name, '', '')
                                 FROM    Sysinfo Si1
                                 WHERE  Si1.Table_Name = Si2.Table_Name
                                 ORDER BY Si1.Table_Name
                                       , Si1.Ordinal_Position
                                 FOR XML PATH('')
                              ), 1, 2, '') AS Primary_Keys
        FROM Sysinfo Si2
        WHERE Table_Name = CASE
                           WHEN @TableName NOT IN( '', 'All')
                           THEN @TableName
                           ELSE Table_Name
                        END
        GROUP BY Si2.Table_Name, Si2.Schema_Name;
    

    그리고 같은 패턴은 조지의 쿼리를 사용 :

    DECLARE @TableName VARCHAR(100) = '';
    WITH Sysinfo
        AS (SELECT S.Name AS Schema_Name
                , T.Name AS Table_Name
                , Tc.Name AS Column_Name
                , Ic.Key_Ordinal AS Ordinal_Position
            FROM   [LinkServer].Sys.Schemas S
                 JOIN [LinkServer].Sys.Tables T ON S.Schema_Id = T.Schema_Id
                 JOIN [LinkServer].Sys.Indexes I ON T.Object_Id = I.Object_Id
                 JOIN [LinkServer].Sys.Index_Columns Ic ON I.Object_Id = Ic.Object_Id
                                                           AND I.Index_Id = Ic.Index_Id
                 JOIN [LinkServer].Sys.Columns Tc ON Ic.Object_Id = Tc.Object_Id
                                                      AND Ic.Column_Id = Tc.Column_Id
            WHERE  I.Is_Primary_Key = 1)
        SELECT           Schema_Name
                        ,Table_Name
                        , STUFF(
                              (
                                 SELECT ', '
                                     , REPLACE(Si1.Column_Name, '', '')
                                 FROM    Sysinfo Si1
                                 WHERE  Si1.Table_Name = Si2.Table_Name
                                 ORDER BY Si1.Table_Name
                                       , Si1.Ordinal_Position
                                 FOR XML PATH('')
                              ), 1, 2, '') AS Primary_Keys
        FROM Sysinfo Si2
        WHERE Table_Name = CASE
                           WHEN @TableName NOT IN('', 'All')
                           THEN @TableName
                           ELSE Table_Name
                        END
        GROUP BY Si2.Table_Name, Si2.Schema_Name;
    
  18. ==============================

    18.나는이 유용, 또한 다음 사람이 기본 키있는 쉼표로 분리 된 목록을 열을 쉼표로 분리 된 목록 테이블의 목록을 제공하고 발견

    나는이 유용, 또한 다음 사람이 기본 키있는 쉼표로 분리 된 목록을 열을 쉼표로 분리 된 목록 테이블의 목록을 제공하고 발견

    SELECT T.TABLE_SCHEMA, T.TABLE_NAME, 
    STUFF((
        SELECT ', ' + C.COLUMN_NAME
        FROM INFORMATION_SCHEMA.COLUMNS C
            WHERE C.TABLE_SCHEMA = T.TABLE_SCHEMA
            AND T.TABLE_NAME = C.TABLE_NAME
            FOR XML PATH ('')
        ), 1, 2, '') AS Columns,
    STUFF((
    SELECT ', ' + C.COLUMN_NAME 
    FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE C
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
        ON C.TABLE_SCHEMA = TC.TABLE_SCHEMA
        AND C.TABLE_NAME = TC.TABLE_NAME
        WHERE C.TABLE_SCHEMA = T.TABLE_SCHEMA
        AND T.TABLE_NAME = C.TABLE_NAME
        AND TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
        FOR XML PATH ('')
    ), 1, 2, '') AS [Key]
    FROM INFORMATION_SCHEMA.TABLES T
    ORDER BY T.TABLE_SCHEMA, T.TABLE_NAME
    
  19. ==============================

    19.

    declare @TableName nvarchar(50)='TblInvoice' -- your table name
    declare @TypeOfKey nvarchar(50)='PK' -- For Primary key
    
    SELECT Name FROM sys.objects
    WHERE type = @TypeOfKey 
    AND  parent_object_id = OBJECT_ID (@TableName)
    
  20. ==============================

    20.나는 아래의 원래의 질문에 대한보다 정확한 간단한 대답을 제안 할 수 있습니다

    나는 아래의 원래의 질문에 대한보다 정확한 간단한 대답을 제안 할 수 있습니다

    SELECT 
    KEYS.table_schema, KEYS.table_name, KEYS.column_name, KEYS.ORDINAL_POSITION 
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE keys
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONS 
        ON cons.TABLE_SCHEMA = keys.TABLE_SCHEMA 
        AND cons.TABLE_NAME = keys.TABLE_NAME 
        AND cons.CONSTRAINT_NAME = keys.CONSTRAINT_NAME
    WHERE cons.CONSTRAINT_TYPE = 'PRIMARY KEY'
    

    노트:

  21. ==============================

    21.최근에 게시 될 수도 있지만 희망이 의지 도움말 사람이 T-SQL 쿼리를 사용하여 SQL 서버에 기본 키의 목록을 볼 수 있습니다 :

    최근에 게시 될 수도 있지만 희망이 의지 도움말 사람이 T-SQL 쿼리를 사용하여 SQL 서버에 기본 키의 목록을 볼 수 있습니다 :

    SELECT  schema_name(t.schema_id) AS [schema_name], t.name AS TableName,        
        COL_NAME(ic.OBJECT_ID,ic.column_id) AS PrimaryKeyColumnName,
        i.name AS PrimaryKeyConstraintName
    FROM    sys.tables t 
    INNER JOIN sys.indexes AS i  on t.object_id=i.object_id 
    INNER JOIN  sys.index_columns AS ic ON  i.OBJECT_ID = ic.OBJECT_ID
                                AND i.index_id = ic.index_id 
    WHERE OBJECT_NAME(ic.OBJECT_ID) = 'YourTableNameHere'
    

    당신은 당신이 할 수있는 경우이 쿼리를 사용하여 모든 외부 키의 목록을 볼 수 있습니다 :

    SELECT
    f.name as ForeignKeyConstraintName
    ,OBJECT_NAME(f.parent_object_id) AS ReferencingTableName
    ,COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ReferencingColumnName
    ,OBJECT_NAME (f.referenced_object_id) AS ReferencedTableName
    ,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS 
     ReferencedColumnName  ,delete_referential_action_desc AS 
    DeleteReferentialActionDesc ,update_referential_action_desc AS 
    UpdateReferentialActionDesc
    FROM sys.foreign_keys AS f
    INNER JOIN sys.foreign_key_columns AS fc
    ON f.object_id = fc.constraint_object_id
     --WHERE OBJECT_NAME(f.parent_object_id) = 'YourTableNameHere' 
     --If you want to know referecing table details 
     WHERE OBJECT_NAME(f.referenced_object_id) = 'YourTableNameHere' 
     --If you want to know refereced table details 
    ORDER BY f.name
    
  22. ==============================

    22.당신이 특정 스키마 아래에있는 모든 테이블의 기본 키를 찾고 있다면 나는 매우 효과적인, 내 친구에서 이것을 발견했다.

    당신이 특정 스키마 아래에있는 모든 테이블의 기본 키를 찾고 있다면 나는 매우 효과적인, 내 친구에서 이것을 발견했다.

    SELECT tc.constraint_name AS IndexName,tc.table_name AS TableName,tc.table_schema
    AS SchemaName,kc.column_name AS COLUMN_NAME
    FROM information_schema.table_constraints tc,information_schema.key_column_usage kc
    WHERE tc.constraint_type = 'PRIMARY KEY' AND kc.table_name = tc.table_name AND kc.table_schema = tc.table_schema
    AND kc.constraint_name = tc.constraint_name AND tc.table_schema='<SCHEMA_NAME>'
    
  23. ==============================

    23.당신이 주어진 테이블에서 코드를 자신의 ORM을하거나 생성하기 위해 찾고 있다면, 다음이 당신이 양식을 찾고있는 수 있습니다 :

    당신이 주어진 테이블에서 코드를 자신의 ORM을하거나 생성하기 위해 찾고 있다면, 다음이 당신이 양식을 찾고있는 수 있습니다 :

    declare @table varchar(100) = 'mytable';
    
    with cte as
    (
        select 
            tc.CONSTRAINT_SCHEMA
            , tc.CONSTRAINT_TYPE
            , tc.TABLE_NAME
            , ccu.COLUMN_NAME
            , IS_NULLABLE
            , DATA_TYPE
            , CHARACTER_MAXIMUM_LENGTH
            , NUMERIC_PRECISION
        from 
            INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
            inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu on tc.TABLE_NAME=ccu.TABLE_NAME  and tc.TABLE_SCHEMA=ccu.TABLE_SCHEMA
            inner join information_schema.COLUMNS c on ccu.COLUMN_NAME=c.COLUMN_NAME and ccu.TABLE_NAME=c.TABLE_NAME and ccu.TABLE_SCHEMA=c.TABLE_SCHEMA
        where 
            tc.table_name=@table
            and 
            ccu.CONSTRAINT_NAME=tc.CONSTRAINT_NAME
        union 
        select TABLE_SCHEMA,'COLUMN', TABLE_NAME, COLUMN_NAME, IS_NULLABLE, DATA_TYPE,CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=@table
        and COLUMN_NAME not in (select COLUMN_NAME from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_NAME = @table)
    )
    select 
        cast(iif(CONSTRAINT_TYPE='PRIMARY KEY',1,0) as bit) PrimaryKey
        ,cast(iif(CONSTRAINT_TYPE='FOREIGN KEY',1,0) as bit) ForeignKey
        ,cast(iif(CONSTRAINT_TYPE='COLUMN',1,0) as bit) NotKey
        ,COLUMN_NAME
        ,cast(iif(is_nullable='NO',0,1) as bit) IsNullable
        , DATA_TYPE
        , CHARACTER_MAXIMUM_LENGTH
        , NUMERIC_PRECISION 
    from 
        cte 
    order by 
        case CONSTRAINT_TYPE 
            when 'PRIMARY KEY' then 1 
            when 'FOREIGN KEY' then 2 
            else 3 end
        , COLUMN_NAME
    

    다음 결과는 같을 것이다 것입니다 :

    <표 cellspacing = 0 테두리 = 1> 기본 키 외래 키 NotKey COLUMN_NAME ISNULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH NUMERIC_PRECISION 1 0 0 LectureNoteID 0 INT NULL 10 0 1 0 LectureId 0 INT NULL 10 0 1 0 NoteTypeID 0 INT NULL 10 0 0 1 바디 0 NVARCHAR -1 NULL 0 0 1 DisplayOrder 0 INT NULL 10

  24. ==============================

    24.기본 키 입력이 필요한 경우,이 쿼리는 유용 할 수 있습니다 :

    기본 키 입력이 필요한 경우,이 쿼리는 유용 할 수 있습니다 :

    SELECT L.TABLE_SCHEMA, L.TABLE_NAME, L.COLUMN_NAME, R.TypeName
    FROM(
        SELECT COLUMN_NAME, TABLE_NAME, TABLE_SCHEMA
        FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
        WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1
    )L
    LEFT JOIN (
        SELECT
        OBJECT_NAME(c.OBJECT_ID) TableName ,c.name AS ColumnName ,t.name AS TypeName
        FROM sys.columns AS c
        JOIN sys.types AS t ON c.user_type_id=t.user_type_id
    )R ON L.COLUMN_NAME = R.ColumnName AND L.TABLE_NAME = R.TableName
    
  25. ==============================

    25.쉼표는 주어진 TABLENAME 및 스키마에 대한 기본 키 열 구분 된 목록의 경우 :

    쉼표는 주어진 TABLENAME 및 스키마에 대한 기본 키 열 구분 된 목록의 경우 :

    Select distinct SUBSTRING ( stuff(( select distinct ',' + [COLUMN_NAME] 
                                        from INFORMATION_SCHEMA.KEY_COLUMN_USAGE  
                                        where OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1  
                                        AND TABLE_NAME = 'TableName' AND TABLE_SCHEMA = 'Schema'  
                                        order by 1 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,0,'' ) 
                                ,2,9999) 
    
  26. from https://stackoverflow.com/questions/95967/how-do-you-list-the-primary-key-of-a-sql-server-table by cc-by-sa and MIT license