web-dev-qa-db-fra.com

Comment décrire une table dans SQL Server 2008?

Je veux décrire une table dans SQL Server 2008 comme ce que nous pouvons faire avec la commande DESC dans Oracle.

J'ai table [EX].[dbo].[EMP_MAST] que je veux décrire, mais ça ne marche pas.

Erreur affichée:

L'objet 'EMP_MAST' n'existe pas dans la base de données 'maître' ou n'est pas valide pour cette opération.

45
Niks

Selon cette documentation :

DESCRIPTION MY_TABLE

est équivalent à

SELECT nom_colonne "Nom", nullable "Null?", Concat (concat (concat (type_données, '('), longueur_données)), ')') "Type" FROM type_tab_colonnes WHERE nom_table = 'TABLE_NAME_TO_DESCRIBE';

J'ai à peu près traduit cela en équivalent SQL Server - assurez-vous simplement de l'exécuter sur la base de données EX.

SELECT column_name AS [name],
       IS_NULLABLE AS [null?],
       DATA_TYPE + COALESCE('(' + CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1
                                  THEN 'Max'
                                  ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5))
                                  END + ')', '') AS [type]
FROM   INFORMATION_SCHEMA.Columns
WHERE  table_name = 'EMP_MAST'
40
Bridge

Vous pouvez utiliser sp_columns , une procédure stockée pour décrire la table.

exec sp_columns TableName

Vous pouvez également utiliser sp_help .

79
Jainendra

La procédure intégrée sp_help est l'élément le plus proche de SQL Server avec la fonction DESC de Oracle, à mon humble avis.

sp_help MyTable

Utilisation

sp_help "[SchemaName].[TableName]" 

ou

sp_help "[InstanceName].[SchemaName].[TableName]"

au cas où vous auriez besoin de qualifier davantage le nom de la table

28
Daniel Zazula

Vous pouvez utiliser le raccourci clavier pour Description/informations détaillées du tableau dans SQL Server 2008.

Suivez les étapes:

  1. Écrire le nom de la table,
  2. Sélectionnez-le et appuyez sur Alt  +  F1
  3. Il montrera des informations détaillées/description du tableau mentionné comme,

    1) date de création du tableau,
    2) Description des colonnes,
    3) Identité,
    4) Index,
    5) Contraintes,
    6) Références etc. Comme indiqué ci-dessous [ exemple]:

Alt+F1 Demo

7
Vikrant

Peut-être que cela peut aider:

Use MyTest
Go
select * from information_schema.COLUMNS where TABLE_NAME='employee'

{où: MyTest = DatabaseName Employee = TableName} - Conditions optionnelles

7
SQL HELP

J'aime la réponse qui tente de traduire, cependant, lors de l'utilisation du code, elle n'aime pas les colonnes qui ne sont pas de type VARCHAR, telles que BIGINT ou DATETIME. J'avais besoin de quelque chose de similaire aujourd'hui, alors j'ai pris le temps de le modifier plus à mon goût. Il est également maintenant encapsulé dans une fonction qui est la chose la plus proche que je puisse trouver à décrire simplement comme Oracle le gère. Il se peut que je manque encore quelques types de données dans ma déclaration de cas, mais cela fonctionne pour tout ce que j'ai essayé. Il commande également par position ordinale. cela pourrait être étendu pour inclure facilement les colonnes de clé primaire.

CREATE FUNCTION dbo.describe (@TABLENAME varchar(50))
returns table
as
RETURN
(
SELECT TOP 1000 column_name AS [ColumnName],
       IS_NULLABLE AS [IsNullable],
       DATA_TYPE + '(' + CASE 
                                    WHEN DATA_TYPE = 'varchar' or DATA_TYPE = 'char' THEN 
                                      CASE 
                                        WHEN Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) = -1 THEN 'Max'
                                        ELSE Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5))
                                      END
                                    WHEN DATA_TYPE = 'decimal' or DATA_TYPE = 'numeric' THEN
                                      Cast(NUMERIC_PRECISION AS VARCHAR(5))+', '+Cast(NUMERIC_SCALE AS VARCHAR(5))
                                    WHEN DATA_TYPE = 'bigint' or DATA_TYPE = 'int' THEN
                                      Cast(NUMERIC_PRECISION AS VARCHAR(5))
                                    ELSE ''
                                  END + ')' AS [DataType]
FROM   INFORMATION_SCHEMA.Columns
WHERE  table_name = @TABLENAME
order by ordinal_Position
);
GO

une fois que vous avez créé la fonction, voici un exemple de tableau que j'ai utilisé

create table dbo.yourtable
(columna bigint,
 columnb int,
 columnc datetime,
 columnd varchar(100),
 columne char(10),
 columnf bit,
 columng numeric(10,2),
 columnh decimal(10,2)
 )

Ensuite, vous pouvez l'exécuter comme suit

select * from describe ('yourtable')

Il retourne le suivant

ColumnName IsNullable DataType


columna NO bigint (19)
columnb NO int (10)
columnc NO datetime ()
columnd NO varchar (100)
columne NO char (10)
columnf NO bit ()
columng NO numérique (10, 2)
columnh PAS de décimale (10, 2)

espérons que cela aide quelqu'un.

6
Schoon

En tant que variante de la réponse de Bridge (je n'ai pas encore assez de représentants pour commenter et je ne me sentais pas bien à propos de la modification de cette réponse), voici une version qui fonctionne mieux pour moi.

SELECT column_name AS [Name],
   IS_NULLABLE AS [Null?],
   DATA_TYPE + CASE
                 WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN ''
                 WHEN CHARACTER_MAXIMUM_LENGTH > 99999 THEN ''
                 ELSE '(' + Cast(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(5)) + ')' 
               END AS [Type]
FROM   INFORMATION_SCHEMA.Columns
WHERE  table_name = 'table_name'

Changements notables:

  • Fonctionne pour types sans longueur. Pour une colonne int, je voyais NULL pour le type parce que sa longueur était nulle et que la colonne Type entière était effacée. Donc, n'imprimez aucun composant de longueur (ou parenthèses).
  • Modifiez la vérification pour [~ # ~] transtyper [~ # ~] longueur de -1 en vérifier la longueur réelle. Je recevais une erreur de syntaxe parce que le cas a abouti à '*' au lieu de -1. Il semble plus judicieux d'effectuer une vérification arithmétique plutôt qu'un dépassement de capacité du CAST.
  • Ne pas imprimer la longueur si très long (arbitrairement> 5 chiffres).
2
SteveW

Il suffit d'entrer la ligne ci-dessous.

exec sp_help [table_name]
1
Jag