Depende del RDBMS; SQL Server tiene la sys.syscolumnstabla, por ejemplo.
LittleBobbyTables - Au Revoir
3
Sí, pero será diferente según el tipo de RDBMS que esté utilizando: SQL es un lenguaje, no el producto de la base de datos, y esta pregunta se basa en el producto específico. Podrá encontrar este tipo de información en la INFORMATION_SCHEMA.COLUMNStabla, si su RDBMS lo tiene.
Puente
Respuestas:
461
Usando SQL Server:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME ='yourTableName'AND
COLUMN_NAME ='yourColumnName'
Solo si no desea ver el nombre de la columna correspondiente. Esto solo devolverá los tipos. Si desea ver el nombre de la columna a la que pertenece el tipo, deberá seleccionar COLUMN_NAME también ...
HackyStack
55
Y si su tabla no está en el esquema predeterminado, puede extender la condición conAND TABLE_SCHEMA = 'yourSchema'
luviktor
8
esto es genial, pero ¿es posible que también devuelva el rango para el tipo de columna? es decir, en varchar(255)lugar de varchary en int(11)lugar de int?
Don Cheadle
13
@mmcrae: Es posible usar la columna CHARACTER_MAXIMUM_LENGTHen INFORMATION_SCHEMA.COLUMNS. Simplemente haga una SELECT * FROM INFORMATION_SCHEMA.COLUMNSpara ver todas las columnas disponibles.
Francis P
2
¿Qué pasa con las tablas temporales?
Ilya Gazman
77
La forma más fácil en TSQL es:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='yourTableName'
He votado porque esta no es la respuesta exacta, pero me proporciona información valiosa. Por ejemplo, la información "IsComputed" que no encontré en el esquema de información pero que puedo encontrar en el código de procedimiento sp_help y copiar desde allí.
Christoph
2
seleccione el nombre de la tabla y haga clic en Alt+F1.. da el mismo resultado.
Pugal
para aclarar: el nombre de la tabla o vista debe seleccionarse en el editor y luego presionar Alt+F1. No en la solución Object Explorer. Esta es una característica muy útil
bugybunny
18
En TSQL / MSSQL se ve así:
SELECT t.name, c.name
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types y ON y.user_type_id = c.user_type_id
WHERE t.name =''
¿De lo contrario te refieres a otros RDBMS aparte de MySQL?
Lamak
2
Si. La DESCRIBEsintaxis también es válida en Oracle, sin embargo, MsSQL no aceptará esta sintaxis.
fimas
Vea la respuesta de @jTC para el método en MSSQL y TSQL.
fimas
Las versiones más recientes de MySQL tienen information_schema.COLUMNS.
Rick James
Encuentro que DESC O DESCRIBE (según el DBMS que use) es útil para tablas pequeñas con 3 o 4 columnas, luego muestra la estructura de la tabla con el nombre de la columna Indicador anulable y tipo de columna para tablas grandes, sin embargo, lleva más tiempo devolver un resultado y Es más difícil encontrar la información que necesita.
velocidad
7
Otra variación con MS SQL:
SELECT TYPE_NAME(system_type_id)FROM sys.columns
WHERE name ='column_name'AND[object_id]= OBJECT_ID('[dbo].[table_name]');
Para construir sobre las respuestas anteriores, a menudo es útil obtener el tipo de datos de columna en el mismo formato que necesita para declarar columnas.
Por ejemplo, varchar(50), varchar(max), decimal(p, s).
Esto le permite hacer eso:
SELECT[Name]= c.[name],[Type]=CASEWHEN tp.[name]IN('varchar','char')THEN tp.[name]+'('+ IIF(c.max_length =-1,'max', CAST(c.max_length AS VARCHAR(25)))+')'WHEN tp.[name]IN('nvarchar','nchar')THEN tp.[name]+'('+ IIF(c.max_length =-1,'max', CAST(c.max_length /2AS VARCHAR(25)))+')'WHEN tp.[name]IN('decimal','numeric')THEN tp.[name]+'('+ CAST(c.[precision]AS VARCHAR(25))+', '+ CAST(c.[scale]AS VARCHAR(25))+')'WHEN tp.[name]IN('datetime2')THEN tp.[name]+'('+ CAST(c.[scale]AS VARCHAR(25))+')'ELSE tp.[name]END,[RawType]= tp.[name],[MaxLength]= c.max_length
,[Precision]= c.[precision],[Scale]= c.scale
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name]='dbo'AND t.[name]='MyTable'
Esta debería haber sido la respuesta aceptada. Gracias, tal vez pueda agregar la condición (t.type = 'U') - eliminar la tabla del sistema
Iannick
Y los tipos VARBINARIOS podrían ser fácilmente atendidos agregando eso a la primera WHENlínea:WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Ingeniero invertido
3
USE[YourDatabaseName]
GO
SELECT column_name 'Column Name',
data_type 'Data Type'FROM information_schema.columns
WHERE table_name ='YourTableName'
GO
Esto devolverá los valores Nombre de columna, mostrándole los nombres de las columnas y los Tipos de datos de esas columnas (ints, varchars, etc.).
En mi caso, necesitaba obtener el tipo de datos para Dynamic SQL (Shudder!) De todos modos, aquí hay una función que creé que devuelve el tipo de datos completo. Por ejemplo, en lugar de devolver 'decimal', devolvería DECIMAL (18,4): dbo.GetLiteralDataType
Use esta consulta para obtener el esquema, la tabla, la columna, el tipo, max_length, is_nullable
SELECT QUOTENAME(SCHEMA_NAME(tb.[schema_id]))AS'Schema',QUOTENAME(OBJECT_NAME(tb.[OBJECT_ID]))AS'Table',C.NAME as'Column',T.name AS'Type',C.max_length
,C.is_nullable
FROM SYS.COLUMNS C INNERJOIN SYS.TABLES tb ON tb.[object_id]= C.[object_id]INNERJOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped]=0ORDERBY tb.[Name]
select columndatatype from sys.syscolumns
where referenceid =(select tableid from sys.systables
where tablename ='YOUR_TABEL_NAME'and columnname='YOUR_COLUMN_NAME')
Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))
'y sample (valRs es mi función para rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):
sys.syscolumns
tabla, por ejemplo.INFORMATION_SCHEMA.COLUMNS
tabla, si su RDBMS lo tiene.Respuestas:
Usando SQL Server:
fuente
AND TABLE_SCHEMA = 'yourSchema'
varchar(255)
lugar devarchar
y enint(11)
lugar deint
?CHARACTER_MAXIMUM_LENGTH
enINFORMATION_SCHEMA.COLUMNS
. Simplemente haga unaSELECT * FROM INFORMATION_SCHEMA.COLUMNS
para ver todas las columnas disponibles.La forma más fácil en TSQL es:
fuente
Para SQL Server, este procedimiento almacenado del sistema devolverá toda la información de la tabla, incluidos los tipos de datos de columna:
fuente
Alt+F1
.. da el mismo resultado.Alt+F1
. No en la solución Object Explorer. Esta es una característica muy útilEn TSQL / MSSQL se ve así:
fuente
JOIN sys.types y ON y.user_type_id = c.user_type_id
system_type_id no es único. sys.columns docen Oracle SQL harías esto:
fuente
Si está utilizando MySQL, puede intentar
MOSTRAR COLUMNAS en dev.mysql.com
De lo contrario, deberías poder hacer
fuente
DESCRIBE
sintaxis también es válida en Oracle, sin embargo, MsSQL no aceptará esta sintaxis.information_schema.COLUMNS
.Otra variación con MS SQL:
fuente
Usando TSQL / MSSQL
Esta consulta obtendrá: nombre de la tabla, nombre de la columna, tipo de datos, longitud del tipo de datos y valores nulos permitidos
Lo único que debe cambiarse es your_table_name.
fuente
Para construir sobre las respuestas anteriores, a menudo es útil obtener el tipo de datos de columna en el mismo formato que necesita para declarar columnas.
Por ejemplo,
varchar(50)
,varchar(max)
,decimal(p, s)
.Esto le permite hacer eso:
fuente
WHEN
línea:WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Esto devolverá los valores Nombre de columna, mostrándole los nombres de las columnas y los Tipos de datos de esas columnas (ints, varchars, etc.).
fuente
Para IBM DB2 :
fuente
Para recuperar los tipos de datos declarados reales, por ejemplo, para su uso en SQL dinámico para ALTERAR COLUMNAS, se puede usar algo como esto:
fuente
En mi caso, necesitaba obtener el tipo de datos para Dynamic SQL (Shudder!) De todos modos, aquí hay una función que creé que devuelve el tipo de datos completo. Por ejemplo, en lugar de devolver 'decimal', devolvería DECIMAL (18,4): dbo.GetLiteralDataType
fuente
Usando TSQL / MSSQL
Puedes usar la
INTO
palabra clave.El resultado de
SELECT
en una TABLA realEjemplo:
select .... INTO real_table_name
Después
fuente
Use esta consulta para obtener el esquema, la tabla, la columna, el tipo, max_length, is_nullable
fuente
Le dará información sobre todas las columnas de la tabla.
fuente
Para Spark SQL :
fuente
Para Apache Derby como se muestra en esta respuesta :
fuente
En vb60 puedes hacer esto:
'y sample (valRs es mi función para rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):
fuente
Dado que algunas personas también solicitaban la precisión con el tipo de datos, me gustaría compartir mi script que he creado para tal fin.
No es perfecto, pero funciona en la mayoría de los casos.
Utilizando
Sql-Server
fuente
Otra opción para MS SQL es reemplazar la
select
consulta aquí con la consulta para la que desea los tipos:fuente