¿Cuál es el equivalente de 'describir tabla' en SQL Server?

321

Tengo una base de datos SQL Server y quiero saber qué columnas y tipos tiene. Prefiero hacer esto a través de una consulta en lugar de usar una GUI como Enterprise Manager. ¿Hay alguna forma de hacer esto?

marc_s
fuente
1
Otro stackoverflow [pregunta] [1] ha respondido esto [1]: stackoverflow.com/questions/11078106/…
Shiva
No entiendo por qué Microsoft no puso esta opción de antemano. Esto es debe tener funcionalidad.
Sukumaar

Respuestas:

342

Puede usar el procedimiento almacenado sp_columns :

exec sp_columns MyTable
Vincent Ramdhanie
fuente
1
Gracias. Estaba a punto de publicar la misma pregunta con T-SQL en lugar de MSSQL.
Jedidja el
11
Solo una nota rápida: no ponga el nombre de la tabla entre comillas y no use la sintaxis TableOwner.TableName.
Gezim
1
Vea aquí si no obtiene resultados cuando ejecuta esta consulta.
mlissner
12
use Select * From INFORMATION_SCHEMA.COLUMNS Donde TABLE_NAME = 'TABLENAME' si no desea usar un procedimiento almacenado
Matias Elorriaga
1
La salida de sp_columns es ridículamente ilegible en sqlcmd incluso con enormes anchos de terminal. Las soluciones que se selectencuentran a continuación son mucho más apropiadas para los usuarios de sqlcmd.
ctpenrose
123

Existen algunos métodos para obtener metadatos sobre una tabla:

EXEC sp_help tablename

Devolverá varios conjuntos de resultados, describiendo la tabla, sus columnas y restricciones.

Las INFORMATION_SCHEMAvistas le darán la información que desea, aunque desafortunadamente tiene que consultar las vistas y unirlas manualmente.

Brannon
fuente
77
Para mí funcionó sin el carácter "@" EXEC sp_help 'table_name'
Ali
Esta es una versión más correcta de la respuesta de Viranja. El @es una sintaxis incorrecta sin embargo.
pcnate
Parece que @tablenamees una variable en el ejemplo. El sp funciona en ambos sentidos, con una cadena o el nombre de tabla 'simple' ( exec sp_help Employeeso exec sp_help 'Employees')
KekuSemau
FYI: El esquema (e incluso la base de datos) puede ir dentro de las garrapatas:execute sp_help 'db.sch.your_table
ColinMac
53

En caso de que no desee utilizar el proceso almacenado, aquí hay una versión de consulta simple

select * 
  from information_schema.columns 
 where table_name = 'aspnet_Membership'
 order by ordinal_position
Salamander2007
fuente
1
En mi caso, esto también se aplica si, por algún motivo, esos procesos almacenados no están disponibles.
James Mills el
El proceso almacenado es inflexible y realmente hostil para los usuarios ingenuos de sqlcmd como yo
ctpenrose
Me encanta este, ya que ordena por nombre: D
Marin
33

Puedes usar el siguiente

sp_help tablename

Ejemplo: sp_help Customer

O use el acceso directo

  • seleccione tabla presione Alt + F1

Ejemplo: Cliente Presione Alt + F1

Viranja kaushalya
fuente
Tenga en cuenta que, si tiene la tabla en un esquema definido por el usuario, debe excluirla de la consulta. Todos los esquemas que contengan una tabla con este nombre aparecerán en una columna llamada "TABLE_OWNER" en el conjunto de resultados.
Buggieboy
Tenga en cuenta que para que el acceso directo funcione, la tabla / vista / procedimiento debe estar completamente seleccionada. SSMS no expande automáticamente la selección (lo hubiera esperado). Ctrl+Wse puede usar para expandir la selección y seleccionar el nombre completo.
bugybunny
29

Use esta consulta

Select * From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = 'TABLENAME'
sukhi
fuente
1
Funciona para mí si dices "usar MyDatabase" primero.
Jason D
Me gusta porque también funciona en MySQL, por lo que no tengo que cambiar mi SQL en mi código
Abdul
1
Esta respuesta no es diferente de stackoverflow.com/a/319424/695671, que llegó 5 años antes. No encuentro útiles las respuestas repetidas.
Jason S
15

Además de las formas que se muestran en otras respuestas, puede usar

SELECT TOP 0 * FROM table_name

Esto le dará el nombre de cada columna sin resultados, y se completa casi instantáneamente con una sobrecarga mínima.

kingfrito_5005
fuente
TOP 1 también daría una muestra de datos, lo que podría ser más ilustrativo.
Spurgeon
14

Utilice la siguiente consulta sql; Esto funcionó para mi caso.

select * FROM   INFORMATION_SCHEMA.Columns where table_name = 'tablename';
Abhijeet
fuente
2
La misma respuesta se dio en 2008 y 2014. No encuentro útiles las respuestas repetidas.
Jason S
14

Simplemente seleccione la tabla y presione Alt+ F1,

mostrará toda la información sobre la tabla, como el nombre de la columna, el tipo de datos, las claves, etc.

Shwetank Suthar
fuente
77
OP solicitó un método sin GUI
Spikolynn
7

Escribí un sql * plus DESC (RIBE) como select (también muestra los comentarios de la columna) en 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];

La selección mencionada anteriormente se puede usar en un procedimiento almacenado marcado del sistema y se puede llamar desde cualquier base de datos de su instancia de una manera simple:

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

Para ejecutar el tipo de procedimiento:

EXEC sp_desc 'YourDB.YourSchema.YourTable';

Si desea obtener una descripción de un objeto de la base de datos actual (y esquema), escriba simple:

EXEC sp_desc 'YourTable';

Como sp_desc es un procedimiento marcado por el sistema, también puede dejar el comando exec (no recomendado de todos modos):

sp_desc 'YourTable';
Zsolt Hidasi
fuente
6

El equivalente de SQL Server al describecomando de Oracle es el proceso almacenadosp_help

El describecomando le brinda información sobre los nombres de columna, tipos, longitud, etc.

En SQL Server, supongamos que desea describir una tabla 'mytable' en el esquema 'myschema' en la base de datos 'mydb', puede hacer lo siguiente:

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

Puede usar sp_help 'TableName'

usuario3819354
fuente
2

El problema con esas respuestas es que te falta la información clave. Si bien esto es un poco desordenado, esta es una versión rápida que se me ocurrió para asegurarme de que contenga la misma información que muestra 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')

fuente
¿Hay alguna razón por la cual is_primary_key nunca tendría un valor?
Michael
2

Este es el código que uso dentro de EntityFramework Reverse POCO Generator(disponible aquí )

Tabla 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 de clave externa:

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

Propiedades extendidas:

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
fuente
1

utilizar

SELECT COL_LENGTH('tablename', 'colname')

Ninguna otra solución funcionó para mí.

Pravin
fuente
Esto requiere saber cuáles son las otras columnas. También hay un error tipográfico
pcnate
Se arregló la cotización.
nikeee
1

Me gusta este formato:

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

Entonces he usado esto:

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
fuente
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>';

Salida de muestra

abhishek khanna
fuente
Bienvenido a SO! Cuando respondas a una pregunta, intenta explicar un poco tu respuesta. En su caso, hay 16 respuestas más, por lo que debe exponer los pros y los contras de su respuesta
David García Bodego,
1

Si está utilizando FirstResponderKit del equipo de Brent Ozar, también puede ejecutar esta consulta:

exec sp_blitzindex @tablename='MyTable'

Devolverá toda la información sobre la tabla:

  • índices con sus estadísticas de uso (lecturas, escrituras, bloqueos, etc.), espacio utilizado y otros
  • índices faltantes
  • columnas
  • llaves extranjeras
  • contenido estadístico Ejemplo de sp_BlitzIndex

Por supuesto, no es un sistema y stp no tan universal como sp_help o sp_columns , pero devuelve toda la información posible sobre su tabla y creo que vale la pena crearla en su entorno y mencionarla aquí.

Dmitriy Grishin - dogrishin
fuente
1

Simplemente haga doble clic en el nombre de la tabla y presione Alt + F1

mannedear
fuente
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
fuente