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.
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'
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 .
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
Vous pouvez utiliser le raccourci clavier pour Description/informations détaillées du tableau dans SQL Server 2008
.
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]:
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
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.
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:
Il suffit d'entrer la ligne ci-dessous.
exec sp_help [table_name]