SQL Server에서 '설명 테이블'과 동일한 기능은 무엇입니까?


321

SQL Server 데이터베이스가 있고 어떤 열과 유형이 있는지 알고 싶습니다. Enterprise Manager와 같은 GUI를 사용하는 대신 쿼리를 통해이 작업을 수행하고 싶습니다. 이 방법이 있습니까?


1
또 다른 stackoverflow [질문] [1]이 답변 [1] : stackoverflow.com/questions/11078106/…
Shiva

Microsoft가이 옵션을 미리 넣지 않은 이유를 모르겠습니다. 기능이 있어야합니다.
Sukumaar

답변:


342

sp_columns 저장 프로 시저를 사용할 수 있습니다 .

exec sp_columns MyTable

1
감사합니다-MSSQL 대신 T-SQL로 동일한 질문을 게시하려고했습니다.
Jedidja

11
간단한 참고 사항 : 테이블 이름을 따옴표로 묶지 말고 TableOwner.TableName 구문을 사용하지 마십시오.
Gezim

1
이 쿼리를 실행할 때 결과가 나타나지 않으면 여기를 참조 하십시오 .
mlissner

12
저장 프로 시저를 사용하지 않으려면 Select * From INFORMATION_SCHEMA.COLUMNS 여기서 TABLE_NAME = 'TABLENAME'사용
Matias Elorriaga

1
sp_columns의 출력은 막대한 터미널 너비를 사용하더라도 sqlcmd에서 읽을 수 없습니다. select아래에서 찾은 솔루션 은 sqlcmd 사용자에게 훨씬 적합합니다.
ctpenrose

123

테이블에 대한 메타 데이터를 얻는 몇 가지 방법이 있습니다.

EXEC sp_help tablename

테이블, 열 및 제약 조건을 설명하는 여러 결과 집합을 반환합니다.

INFORMATION_SCHEMA불행하게도 당신의 의견을 조회해야하고 수동으로 가입하지만 전망은, 당신이 원하는 정보를 제공 할 것입니다.


7
나에게 그것은 "@"문자 EXEC sp_help는 'TABLE_NAME'없이 일
알리

이것은 Viranja의 대답에 대한 더 정확한 버전입니다. 은 @그러나 잘못된 구문입니다.
pcnate

@tablename예제에서 변수 인 것 같습니다 . sp는 문자열이나 '일반'테이블 이름 ( exec sp_help Employees또는 exec sp_help 'Employees') 을 사용하여 두 가지 방식으로 작동합니다.
KekuSemau

참고 : 스키마 (및 데이터베이스)도 진드기 안에 들어갈 수 있습니다 :execute sp_help 'db.sch.your_table
ColinMac

53

저장 프로 시저를 사용하지 않으려는 경우 간단한 쿼리 버전이 있습니다.

select * 
  from information_schema.columns 
 where table_name = 'aspnet_Membership'
 order by ordinal_position

1
내 경우에는 어떤 이유로 든 저장된 procs를 사용할 수없는 경우에도 적용됩니다.
James Mills

저장된 proc은 융통성이
없으며

이름으로 그것을 주문 등이 하나의 사랑 : D
마린에게

33

다음을 사용할 수 있습니다

sp_help tablename

예 : sp_help 고객

또는 바로 가기 사용

  • 테이블을 선택 Alt + F1을 누릅니다

예 : 고객 프레스 Alt + F1


사용자 정의 스키마에 테이블이있는 경우 쿼리에서 테이블을 제외해야합니다. 이 이름을 가진 테이블을 포함하는 모든 스키마는 결과 집합에서 "TABLE_OWNER"라는 열에 나타납니다.
Buggieboy

바로 가기가 작동하려면 테이블 / 뷰 / 프로 시저를 완전히 선택해야합니다. SSMS는 선택을 자동으로 확장하지 않습니다 (예상 했음). Ctrl+W선택을 확장하고 전체 이름을 선택하는 데 사용할 수 있습니다.
bugybunny

29

이 질의를 사용하십시오

Select * From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = 'TABLENAME'

1
먼저 "MyDatabase 사용"이라고 말하면 작동합니다.
Jason D

MySQL에서도 작동하기 때문에 이것을 좋아합니다. 따라서 코드에서 SQL을 변경할 필요가 없습니다.
Abdul

1
이 답변은 5 년 전에 나온 stackoverflow.com/a/319424/695671 과 다르지 않습니다 . 반복되는 답변이 유용하지 않습니다.
Jason S

15

다른 답변에 표시된 방법 외에도 다음을 사용할 수 있습니다.

SELECT TOP 0 * FROM table_name

결과가없는 각 열의 이름이 표시되고 최소한의 오버 헤드로 거의 즉시 완료됩니다.


TOP 1은 샘플 데이터도 제공 할 것이며, 이는 좀 더 설명이 될 수 있습니다.
Spurgeon

14

다음 SQL 쿼리를 사용하십시오. 이것은 내 경우에 효과가있었습니다.

select * FROM   INFORMATION_SCHEMA.Columns where table_name = 'tablename';

2
2008 년과 2014 년에도 같은 대답이 주어졌습니다. 반복되는 대답이 유용하지 않습니다.
Jason S

14

표를 선택하고 Alt+를 누르십시오 F1.

열 이름, 데이터 유형, 키 등과 같은 테이블에 대한 모든 정보를 표시합니다.


7
OP는 GUI가없는 방법을 요청했습니다
Spikolynn

7

t-sql에서 select (열 주석도 표시)와 같은 sql * plus DESC (RIBE)를 작성했습니다.

USE YourDB
GO

DECLARE @objectName NVARCHAR(128) = 'YourTable';

SELECT
  a.[NAME]
 ,a.[TYPE]
 ,a.[CHARSET]
 ,a.[COLLATION]
 ,a.[NULLABLE]
 ,a.[DEFAULT]
 ,b.[COMMENTS]
-- ,a.[ORDINAL_POSITION]
FROM
  (
    SELECT
      COLUMN_NAME                                     AS [NAME]
     ,CASE DATA_TYPE
        WHEN 'char'       THEN DATA_TYPE  + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')'
        WHEN 'numeric'    THEN DATA_TYPE  + '(' + CAST(NUMERIC_PRECISION AS VARCHAR) + ', ' + CAST(NUMERIC_SCALE AS VARCHAR) + ')'
        WHEN 'nvarchar'   THEN DATA_TYPE  + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')'
        WHEN 'varbinary'  THEN DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')'
        WHEN 'varchar'    THEN DATA_TYPE   + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + ')'
        ELSE DATA_TYPE
      END                                             AS [TYPE]
     ,CHARACTER_SET_NAME                              AS [CHARSET]
     ,COLLATION_NAME                                  AS [COLLATION]
     ,IS_NULLABLE                                     AS [NULLABLE]
     ,COLUMN_DEFAULT                                  AS [DEFAULT]
     ,ORDINAL_POSITION
    FROM   
      INFORMATION_SCHEMA.COLUMNS
    WHERE
      TABLE_NAME = @objectName
  ) a
  FULL JOIN
  (
   SELECT
     CAST(value AS NVARCHAR)                        AS [COMMENTS]
    ,CAST(objname AS NVARCHAR)                      AS [NAME]
   FROM
     ::fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', @objectName, 'column', default)
  ) b
  ON a.NAME COLLATE YourCollation = b.NAME COLLATE YourCollation
ORDER BY
  a.[ORDINAL_POSITION];

위에서 언급 한 선택은 시스템 표시 저장 프로 시저에서 사용할 수 있으며 간단한 방법으로 인스턴스의 모든 데이터베이스에서 호출 할 수 있습니다.

USE master;
GO

IF OBJECT_ID('sp_desc', 'P') IS NOT NULL
  DROP PROCEDURE sp_desc
GO

CREATE PROCEDURE sp_desc (
  @tableName  nvarchar(128)
) AS
BEGIN
  DECLARE @dbName       sysname;
  DECLARE @schemaName   sysname;
  DECLARE @objectName   sysname;
  DECLARE @objectID     int;
  DECLARE @tmpTableName varchar(100);
  DECLARE @sqlCmd       nvarchar(4000);

  SELECT @dbName = PARSENAME(@tableName, 3);
  IF @dbName IS NULL SELECT @dbName = DB_NAME();

  SELECT @schemaName = PARSENAME(@tableName, 2);
  IF @schemaName IS NULL SELECT @schemaName = SCHEMA_NAME();

  SELECT @objectName = PARSENAME(@tableName, 1);
  IF @objectName IS NULL
    BEGIN
      PRINT 'Object is missing from your function call!';
      RETURN;
    END;

  SELECT @objectID = OBJECT_ID(@dbName + '.' + @schemaName + '.' + @objectName);
  IF @objectID IS NULL
    BEGIN
      PRINT 'Object [' + @dbName + '].[' + @schemaName + '].[' + @objectName + '] does not exist!';
      RETURN;
    END;

  SELECT @tmpTableName = '#tmp_DESC_' + CAST(@@SPID AS VARCHAR) + REPLACE(REPLACE(REPLACE(REPLACE(CAST(CONVERT(CHAR, GETDATE(), 121) AS VARCHAR), '-', ''), ' ', ''), ':', ''), '.', '');
  --PRINT @tmpTableName;
  SET @sqlCmd = '
    USE ' + @dbName + '
    CREATE TABLE ' + @tmpTableName + ' (
      [NAME]              nvarchar(128) NOT NULL
     ,[TYPE]              varchar(50)
     ,[CHARSET]           varchar(50)
     ,[COLLATION]         varchar(50)
     ,[NULLABLE]          varchar(3)
     ,[DEFAULT]           nvarchar(4000)
     ,[COMMENTS]          nvarchar(3750));

    INSERT INTO ' + @tmpTableName + '
    SELECT
      a.[NAME]
     ,a.[TYPE]
     ,a.[CHARSET]
     ,a.[COLLATION]
     ,a.[NULLABLE]
     ,a.[DEFAULT]
     ,b.[COMMENTS]
    FROM
      (
        SELECT
          COLUMN_NAME                                     AS [NAME]
         ,CASE DATA_TYPE
            WHEN ''char''      THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')''
            WHEN ''numeric''   THEN DATA_TYPE + ''('' + CAST(NUMERIC_PRECISION AS VARCHAR) + '', '' + CAST(NUMERIC_SCALE AS VARCHAR) + '')''
            WHEN ''nvarchar''  THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')''
            WHEN ''varbinary'' THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')''
            WHEN ''varchar''   THEN DATA_TYPE + ''('' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) + '')''
            ELSE DATA_TYPE
          END                                             AS [TYPE]
         ,CHARACTER_SET_NAME                              AS [CHARSET]
         ,COLLATION_NAME                                  AS [COLLATION]
         ,IS_NULLABLE                                     AS [NULLABLE]
         ,COLUMN_DEFAULT                                  AS [DEFAULT]
         ,ORDINAL_POSITION
        FROM   
          INFORMATION_SCHEMA.COLUMNS
        WHERE   
          TABLE_NAME = ''' + @objectName + '''
      ) a
      FULL JOIN
      (
         SELECT
           CAST(value AS NVARCHAR)                        AS [COMMENTS]
          ,CAST(objname AS NVARCHAR)                      AS [NAME]
         FROM
           ::fn_listextendedproperty (''MS_Description'', ''user'', ''' + @schemaName + ''', ''table'', ''' + @objectName + ''', ''column'', default)
      ) b
      ON a.NAME COLLATE Hungarian_CI_AS = b.NAME COLLATE Hungarian_CI_AS
    ORDER BY
      a.[ORDINAL_POSITION];

    SELECT * FROM ' + @tmpTableName + ';'

    --PRINT @sqlCmd;

    EXEC sp_executesql @sqlCmd;
    RETURN;
END;
GO

EXEC sys.sp_MS_marksystemobject sp_desc
GO

프로 시저 유형을 실행하려면 다음을 수행하십시오.

EXEC sp_desc 'YourDB.YourSchema.YourTable';

현재 데이터베이스 (및 스키마) 단순 유형의 오브젝트에 대한 설명을 얻으려면 다음을 수행하십시오.

EXEC sp_desc 'YourTable';

sp_desc는 시스템 표시 프로 시저이므로 exec 명령을 그대로 둘 수도 있습니다 (어쨌든 권장하지 않음).

sp_desc 'YourTable';

6

Oracle의 describe명령 과 동등한 SQL Server 는 저장된 proc입니다.sp_help

describe명령은 열 이름, 유형, 길이 등에 대한 정보를 제공합니다.

SQL Server에서 'mydb'데이터베이스의 'myschema'스키마에서 'mytable'테이블을 설명한다고 가정하면 다음을 수행 할 수 있습니다.

USE mydb;
exec sp_help 'myschema.mytable';


2

이 답변의 문제점은 주요 정보가 누락되었다는 것입니다. 이것은 약간 지저분하지만 이것은 MySQL Describe가 표시하는 것과 동일한 정보를 포함하기 위해 만든 빠른 버전입니다.

Select SC.name AS 'Field', ISC.DATA_TYPE AS 'Type', ISC.CHARACTER_MAXIMUM_LENGTH AS 'Length', SC.IS_NULLABLE AS 'Null', I.is_primary_key AS 'Key', SC.is_identity AS 'Identity'
From sys.columns AS SC 
LEFT JOIN sys.index_columns AS IC
ON IC.object_id = OBJECT_ID('dbo.Expenses') AND 
IC.column_id = SC.column_id
LEFT JOIN sys.indexes AS I 
ON I.object_id = OBJECT_ID('dbo.Expenses') AND 
IC.index_id = I.index_id
LEFT JOIN information_schema.columns ISC
ON ISC.TABLE_NAME = 'Expenses'
AND ISC.COLUMN_NAME = SC.name
WHERE SC.object_id = OBJECT_ID('dbo.Expenses')

is_primary_key가 값을 가지지 않는 이유가 있습니까?
Michael

2

이것은 내가 사용하는 코드입니다 EntityFramework Reverse POCO Generator( here )

테이블 SQL :

SELECT  c.TABLE_SCHEMA AS SchemaName,
        c.TABLE_NAME AS TableName,
        t.TABLE_TYPE AS TableType,
        c.ORDINAL_POSITION AS Ordinal,
        c.COLUMN_NAME AS ColumnName,
        CAST(CASE WHEN IS_NULLABLE = 'YES' THEN 1
                  ELSE 0
             END AS BIT) AS IsNullable,
        DATA_TYPE AS TypeName,
        ISNULL(CHARACTER_MAXIMUM_LENGTH, 0) AS [MaxLength],
        CAST(ISNULL(NUMERIC_PRECISION, 0) AS INT) AS [Precision],
        ISNULL(COLUMN_DEFAULT, '') AS [Default],
        CAST(ISNULL(DATETIME_PRECISION, 0) AS INT) AS DateTimePrecision,
        ISNULL(NUMERIC_SCALE, 0) AS Scale,
        CAST(COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') AS BIT) AS IsIdentity,
        CAST(CASE WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
                  WHEN COLUMNPROPERTY(OBJECT_ID(QUOTENAME(c.TABLE_SCHEMA) + '.' + QUOTENAME(c.TABLE_NAME)), c.COLUMN_NAME, 'IsComputed') = 1 THEN 1
                  WHEN DATA_TYPE = 'TIMESTAMP' THEN 1
                  ELSE 0
             END AS BIT) AS IsStoreGenerated,
        CAST(CASE WHEN pk.ORDINAL_POSITION IS NULL THEN 0
                  ELSE 1
             END AS BIT) AS PrimaryKey,
        ISNULL(pk.ORDINAL_POSITION, 0) PrimaryKeyOrdinal,
        CAST(CASE WHEN fk.COLUMN_NAME IS NULL THEN 0
                  ELSE 1
             END AS BIT) AS IsForeignKey
FROM    INFORMATION_SCHEMA.COLUMNS c
        LEFT OUTER JOIN (SELECT u.TABLE_SCHEMA,
                                u.TABLE_NAME,
                                u.COLUMN_NAME,
                                u.ORDINAL_POSITION
                         FROM   INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
                                INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
                                    ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA
                                       AND u.TABLE_NAME = tc.TABLE_NAME
                                       AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
                         WHERE  CONSTRAINT_TYPE = 'PRIMARY KEY') pk
            ON c.TABLE_SCHEMA = pk.TABLE_SCHEMA
               AND c.TABLE_NAME = pk.TABLE_NAME
               AND c.COLUMN_NAME = pk.COLUMN_NAME
        LEFT OUTER JOIN (SELECT DISTINCT
                                u.TABLE_SCHEMA,
                                u.TABLE_NAME,
                                u.COLUMN_NAME
                         FROM   INFORMATION_SCHEMA.KEY_COLUMN_USAGE u
                                INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
                                    ON u.TABLE_SCHEMA = tc.CONSTRAINT_SCHEMA
                                       AND u.TABLE_NAME = tc.TABLE_NAME
                                       AND u.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
                         WHERE  CONSTRAINT_TYPE = 'FOREIGN KEY') fk
            ON c.TABLE_SCHEMA = fk.TABLE_SCHEMA
               AND c.TABLE_NAME = fk.TABLE_NAME
               AND c.COLUMN_NAME = fk.COLUMN_NAME
        INNER JOIN INFORMATION_SCHEMA.TABLES t
            ON c.TABLE_SCHEMA = t.TABLE_SCHEMA
               AND c.TABLE_NAME = t.TABLE_NAME
WHERE c.TABLE_NAME NOT IN ('EdmMetadata', '__MigrationHistory')

외래 키 SQL :

SELECT  FK.name AS FK_Table,
        FkCol.name AS FK_Column,
        PK.name AS PK_Table,
        PkCol.name AS PK_Column,
        OBJECT_NAME(f.object_id) AS Constraint_Name,
        SCHEMA_NAME(FK.schema_id) AS fkSchema,
        SCHEMA_NAME(PK.schema_id) AS pkSchema,
        PkCol.name AS primarykey,
        k.constraint_column_id AS ORDINAL_POSITION
FROM    sys.objects AS PK
        INNER JOIN sys.foreign_keys AS f
            INNER JOIN sys.foreign_key_columns AS k
                ON k.constraint_object_id = f.object_id
            INNER JOIN sys.indexes AS i
                ON f.referenced_object_id = i.object_id
                   AND f.key_index_id = i.index_id
            ON PK.object_id = f.referenced_object_id
        INNER JOIN sys.objects AS FK
            ON f.parent_object_id = FK.object_id
        INNER JOIN sys.columns AS PkCol
            ON f.referenced_object_id = PkCol.object_id
               AND k.referenced_column_id = PkCol.column_id
        INNER JOIN sys.columns AS FkCol
            ON f.parent_object_id = FkCol.object_id
               AND k.parent_column_id = FkCol.column_id
ORDER BY FK_Table, FK_Column

확장 된 속성 :

SELECT  s.name AS [schema],
        t.name AS [table],
        c.name AS [column],
        value AS [property]
FROM    sys.extended_properties AS ep
        INNER JOIN sys.tables AS t
            ON ep.major_id = t.object_id
        INNER JOIN sys.schemas AS s
            ON s.schema_id = t.schema_id
        INNER JOIN sys.columns AS c
            ON ep.major_id = c.object_id
               AND ep.minor_id = c.column_id
WHERE   class = 1
ORDER BY t.name

1

사용하다

SELECT COL_LENGTH('tablename', 'colname')

다른 솔루션 중 어느 것도 나를 위해 일하지 않았습니다.


다른 열이 무엇인지 알아야합니다. 또한 AA 오타가
pcnate는

견적을 수정했습니다.
nikeee

1

나는이 형식을 좋아한다 :

name     DataType      Collation             Constraints         PK  FK          Comment

id       int                                 NOT NULL IDENTITY   PK              Order Line Id
pid      int                                 NOT NULL                tbl_orders  Order Id
itemCode varchar(10)   Latin1_General_CI_AS  NOT NULL                            Product Code

그래서 나는 이것을 사용했다 :

DECLARE @tname varchar(100) = 'yourTableName';

SELECT  col.name,

        CASE typ.name
            WHEN 'nvarchar' THEN 'nvarchar('+CAST((col.max_length / 2) as varchar)+')'
            WHEN 'varchar' THEN 'varchar('+CAST(col.max_length as varchar)+')'
            WHEN 'char' THEN 'char('+CAST(col.max_length as varchar)+')'
            WHEN 'nchar' THEN 'nchar('+CAST((col.max_length / 2) as varchar)+')'
            WHEN 'binary' THEN 'binary('+CAST(col.max_length as varchar)+')'
            WHEN 'varbinary' THEN 'varbinary('+CAST(col.max_length as varchar)+')'
            WHEN 'numeric' THEN 'numeric('+CAST(col.precision as varchar)+(CASE WHEN col.scale = 0 THEN '' ELSE ','+CAST(col.scale as varchar) END) +')'
            WHEN 'decimal' THEN 'decimal('+CAST(col.precision as varchar)+(CASE WHEN col.scale = 0 THEN '' ELSE ','+CAST(col.scale as varchar) END) +')'
            ELSE typ.name
            END DataType,

        ISNULL(col.collation_name,'') Collation,

        CASE WHEN col.is_nullable = 0 THEN 'NOT NULL ' ELSE '' END + CASE WHEN col.is_identity = 1 THEN 'IDENTITY' ELSE '' END Constraints,

        ISNULL((SELECT 'PK'
                FROM    sys.key_constraints kc INNER JOIN
                        sys.tables tb ON tb.object_id = kc.parent_object_id INNER JOIN
                        sys.indexes si ON si.name = kc.name INNER JOIN
                        sys.index_columns sic ON sic.index_id = si.index_id AND sic.object_id = si.object_id
                WHERE kc.type = 'PK'
                  AND tb.name = @tname
                  AND sic.column_id = col.column_id),'') PK,

        ISNULL((SELECT (SELECT name FROM sys.tables st WHERE st.object_id = fkc.referenced_object_id)
                FROM    sys.foreign_key_columns fkc INNER JOIN
                        sys.columns c ON c.column_id = fkc.parent_column_id AND fkc.parent_object_id = c.object_id INNER JOIN
                        sys.tables t ON t.object_id = c.object_id
                WHERE t.name = tab.name
                  AND c.name = col.name),'') FK,

        ISNULL((SELECT value
                FROM sys.extended_properties
                WHERE major_id = tab.object_id
                  AND minor_id = col.column_id),'') Comment

FROM sys.columns col INNER JOIN
     sys.tables tab ON tab.object_id = col.object_id INNER JOIN
     sys.types typ ON typ.system_type_id = col.system_type_id
WHERE tab.name = @tname
  AND typ.name != 'sysname'
ORDER BY col.column_id;

1
SELECT C.COLUMN_NAME, C.IS_NULLABLE, C.DATA_TYPE, TC.CONSTRAINT_TYPE, C.COLUMN_DEFAULT
    FROM INFORMATION_SCHEMA.COLUMNS AS C
    FULL JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CC ON C.COLUMN_NAME = CC.COLUMN_NAME 
    FULL JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC ON CC.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
WHERE C.TABLE_NAME = '<Table Name>';

샘플 출력


SO에 오신 것을 환영합니다! 질문에 답할 때 답을 조금 설명해보십시오. 귀하의 경우에는 16 개의 회신이 더 있으므로 귀하의 답변의 장단점을 공개해야합니다
David García Bodego

1

Brent Ozar 팀의 FirstResponderKit 을 사용 하는 경우이 쿼리를 실행할 수도 있습니다.

exec sp_blitzindex @tablename='MyTable'

테이블에 대한 모든 정보를 반환합니다.

  • 사용 통계 (읽기, 쓰기, 잠금 등)가있는 인덱스, 사용 된 공간 및 기타
  • 누락 된 인덱스
  • 외래 키
  • 통계 내용 sp_BlitzIndex 샘플

물론 그것은 시스템이 아니며 sp_help 또는 sp_columns 와 같은 보편적 인 stp는 아니지만 테이블에 대한 가능한 모든 정보를 반환하므로 환경에서 테이블을 만들고 여기에서 언급 할 가치가 있다고 생각합니다.


1

테이블 이름을 두 번 클릭하고 Alt + F1을 누르십시오.


0
CREATE PROCEDURE [dbo].[describe] 
( 
@SearchStr nvarchar(max) 
) 
AS 
BEGIN 
SELECT  
    CONCAT([COLUMN_NAME],' ',[DATA_TYPE],' ',[CHARACTER_MAXIMUM_LENGTH],' ', 
    (SELECT CASE [IS_NULLABLE] WHEN 'NO' THEN 'NOT NULL' ELSE 'NULL' END),
    (SELECT CASE WHEN [COLUMN_DEFAULT] IS NULL THEN '' ELSE CONCAT(' DEFAULT ',[COLUMN_DEFAULT]) END)
    ) AS DESCRIPTION
    FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE @SearchStr
END 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.