Apa yang setara dengan 'deskripsikan tabel' di SQL Server?

321

Saya memiliki database SQL Server dan saya ingin tahu kolom dan tipe apa yang dimilikinya. Saya lebih suka melakukan ini melalui kueri daripada menggunakan GUI seperti Enterprise Manager. Apakah ada cara untuk melakukan ini?

marc_s
sumber
1
Stackoverflow lain [pertanyaan] [1] menjawab ini [1]: stackoverflow.com/questions/11078106/…
Shiva
Saya tidak mengerti mengapa Microsoft tidak meletakkan opsi ini sebelumnya. Ini harus memiliki fungsionalitas.
Sukumaar

Jawaban:

342

Anda dapat menggunakan prosedur tersimpan sp_columns :

exec sp_columns MyTable
Vincent Ramdhanie
sumber
1
Terima kasih - Saya hendak memposting pertanyaan yang sama dengan T-SQL, bukan MSSQL.
Jedidja
11
Hanya catatan singkat: jangan mencantumkan nama tabel dalam tanda kutip dan jangan gunakan sintaksis TableOwner.TableName.
Gezim
1
Lihat di sini jika Anda tidak mendapatkan hasil saat menjalankan kueri ini.
mlissner
12
gunakan Pilih * Dari INFORMATION_SCHEMA.COLUMNS Di mana TABLE_NAME = 'TABLENAME' jika Anda tidak ingin menggunakan prosedur tersimpan
Matias Elorriaga
1
Output dari sp_columns tidak dapat dibaca dalam sqlcmd bahkan menggunakan lebar terminal yang luar biasa. Solusi memanfaatkan selectditemukan di bawah ini jauh lebih tepat untuk pengguna sqlcmd.
ctpenrose
123

Ada beberapa metode untuk mendapatkan metadata tentang tabel:

EXEC sp_help tablename

Akan mengembalikan beberapa set hasil, menggambarkan tabel, kolom dan batasannya.

Tampilan INFORMATION_SCHEMAakan memberi Anda informasi yang Anda inginkan, meskipun sayangnya Anda harus menanyakan tampilan dan bergabung secara manual.

Brannon
sumber
7
Bagi saya itu bekerja tanpa karakter "@" EXEC sp_help 'table_name'
Ali
ini adalah versi yang lebih tepat untuk jawaban Viranja. The @adalah salah sintaks namun.
pcnate
Sepertinya @tablenamevariabel dalam contoh. Sp bekerja dengan dua cara, dengan string atau nama exec sp_help Employeesexec sp_help 'Employees'
tab
FYI: Skema (dan bahkan Database) dapat masuk dalam kutu:execute sp_help 'db.sch.your_table
ColinMac
53

Untuk berjaga-jaga jika Anda tidak ingin menggunakan proc yang disimpan, berikut ini adalah versi kueri sederhana

select * 
  from information_schema.columns 
 where table_name = 'aspnet_Membership'
 order by ordinal_position
Salamander2007
sumber
1
Dalam kasus saya ini juga berlaku jika karena alasan tertentu procs yang disimpan tidak tersedia.
James Mills
Proc yang tersimpan tidak fleksibel dan benar-benar memusuhi pengguna sqlcmd yang naif seperti saya
ctpenrose
cintai yang ini karena perintahnya dengan nama: D
Marin
33

Anda bisa menggunakan yang berikut

sp_help tablename

Contoh: sp_help Pelanggan

ATAU Gunakan Pintasan

  • pilih tabel tekan Alt + F1

Contoh: Pelanggan Tekan Alt + F1

Viranja kaushalya
sumber
Perhatikan bahwa, jika Anda memiliki tabel dalam skema yang ditentukan pengguna, Anda harus mengecualikannya dari kueri. Semua skema yang berisi tabel dengan nama ini akan muncul di kolom yang disebut "TABLE_OWNER" di set hasil.
Buggieboy
Perhatikan bahwa agar jalan pintas berfungsi, tabel / tampilan / prosedur harus dipilih sepenuhnya. SSMS tidak secara otomatis memperluas pilihan (saya harapkan itu). Ctrl+Wdapat digunakan untuk memperluas seleksi dan memilih seluruh nama.
bugybunny
29

Gunakan Query ini

Select * From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = 'TABLENAME'
sukhi
sumber
1
Bekerja untuk saya jika Anda mengatakan "gunakan MyDatabase" terlebih dahulu.
Jason D
Saya suka ini karena ini berfungsi pada MySQL juga, jadi saya tidak perlu mengubah SQL saya dalam kode saya
Abdul
1
Jawaban ini tidak berbeda dengan stackoverflow.com/a/319424/695671 yang datang 5 tahun sebelumnya. Saya tidak menemukan jawaban berulang berguna.
Jason S
15

Selain cara yang ditunjukkan dalam jawaban lain, Anda dapat menggunakan

SELECT TOP 0 * FROM table_name

Ini akan memberi Anda nama setiap kolom tanpa hasil di dalamnya, dan melengkapi hampir secara instan dengan overhead yang minimal.

kingfrito_5005
sumber
TOP 1 akan memberikan data sampel juga, yang mungkin lebih ilustratif.
Spurgeon
14

Silakan gunakan kueri sql berikut; ini berhasil untuk kasus saya.

select * FROM   INFORMATION_SCHEMA.Columns where table_name = 'tablename';
Abhijeet
sumber
2
Jawaban yang sama diberikan pada 2008 dan 2014. Saya tidak menemukan jawaban berulang berguna.
Jason S
14

Cukup pilih tabel dan tekan Alt+ F1,

itu akan menampilkan semua informasi tentang tabel seperti nama kolom, tipe data, kunci dll.

Shwetank Suthar
sumber
7
OP meminta metode tanpa GUI
Spikolynn
7

Saya menulis sql * plus DESC (RIBE) seperti select (menampilkan komentar kolom juga) di t-sql:

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];

Pilih yang disebutkan di atas dapat digunakan dalam sistem yang ditandai prosedur tersimpan dan dapat dipanggil dari basis data contoh Anda dengan cara sederhana:

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

Untuk menjalankan jenis prosedur:

EXEC sp_desc 'YourDB.YourSchema.YourTable';

Jika Anda ingin mendapatkan deskripsi objek dari database saat ini (dan skema) jenis sederhana:

EXEC sp_desc 'YourTable';

Karena sp_desc adalah prosedur bertanda sistem, Anda bahkan dapat meninggalkan perintah exec juga (tidak disarankan):

sp_desc 'YourTable';
Zsolt Hidasi
sumber
6

SQL Server setara dengan Oracle describe perintah adalah proc yang disimpansp_help

Itu describe perintah memberi Anda informasi tentang nama kolom, jenis, panjang, dll

Dalam SQL Server, katakanlah Anda ingin menggambarkan tabel 'mytable' dalam skema 'myschema' dalam database 'mydb', Anda dapat melakukan hal berikut:

USE mydb;
exec sp_help 'myschema.mytable';
VHS
sumber
5

Anda dapat menggunakan sp_help 'TableName'

pengguna3819354
sumber
2

Masalah dengan jawaban-jawaban itu adalah Anda kehilangan informasi kunci. Walaupun ini agak berantakan, ini adalah versi cepat yang saya buat untuk memastikan itu berisi info yang sama dengan yang dideskripsikan oleh MySQL.

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')

sumber
apakah ada alasan mengapa is_primary_key tidak akan pernah memiliki nilai?
Michael
2

Ini adalah kode yang saya gunakan dalam EntityFramework Reverse POCO Generator(tersedia di sini )

Tabel 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 Kunci Asing:

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

Properti yang Diperluas:

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
Simon Hughes
sumber
1

menggunakan

SELECT COL_LENGTH('tablename', 'colname')

Tidak ada solusi lain yang bekerja untuk saya.

Pravin
sumber
ini membutuhkan mengetahui apa kolom lainnya. Juga ada salah ketik
pcnate
Memperbaiki kutipan.
nikeee
1

Saya suka format ini:

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

Jadi saya telah menggunakan ini:

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;
Graham
sumber
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>';

Output Sampel

abhishek khanna
sumber
Selamat datang di SO! Ketika Anda menjawab sebuah pertanyaan, coba jelaskan jawaban Anda sedikit. Dalam kasus Anda, ada 16 balasan lagi sehingga Anda harus membeberkan Pro dan Kontra dari jawaban Anda
David García Bodego
1

Jika Anda menggunakan FirstResponderKit dari tim Brent Ozar, Anda dapat menjalankan kueri ini juga:

exec sp_blitzindex @tablename='MyTable'

Ini akan mengembalikan semua informasi tentang tabel:

  • indeks dengan statistik penggunaannya (membaca, menulis, mengunci, dll), ruang yang digunakan dan lainnya
  • indeks hilang
  • kolom
  • kunci asing
  • isi statistik sampel sp_BlitzIndex

Tentu saja itu bukan sistem dan stp tidak begitu universal seperti sp_help atau sp_columns , tapi ini mengembalikan semua informasi yang mungkin tentang tabel Anda dan saya pikir itu layak untuk membuatnya di lingkungan Anda dan menyebutkannya di sini.

Dmitriy Grishin - dogrishin
sumber
1

Cukup klik dua kali pada nama tabel dan tekan Alt + F1

pak lelaki
sumber
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 
Brian Somerfield
sumber