Si alguna vez necesita obtener una lista de tipos de datos en SQL Server, puede usar una de las vistas del sistema para hacerlo.
En particular, puede usar sys.types
vista del catálogo del sistema. Esta vista devuelve todos los tipos de datos proporcionados por el sistema y definidos por el usuario definidos en la base de datos. Si está utilizando SQL Server 2000 sys.systypes
debería hacer el truco.
Ejemplo 1:sys.types
Ver
Los sys.types
view es la mejor para usar si está usando una versión de SQL Server posterior a SQL Server 2000.
La forma más rápida/fácil de usar sys.types
ver es seleccionar todo. En ese caso, su código podría verse así:
SELECT * FROM sys.types;
Sin embargo, esto devuelve muchas columnas en las que puede o no estar interesado. Puede reducirlo a solo aquellas columnas que le interesen.
Este es un ejemplo de selección de algunas columnas de interés:
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Resultado:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | +------------------+--------------+-------------+---------+-------------------+
Estos son los tipos de datos dentro de la base de datos actual. Si cambia a una base de datos diferente, podría obtener resultados diferentes (esto dependerá en gran medida de si se han definido tipos de datos definidos por el usuario o tipos de datos de alias, y si difieren o no entre las bases de datos).
Ejemplo 2:alias y tipos de datos definidos por el usuario
En el ejemplo anterior, incluí is_user_defined
columna. Podemos ver que ninguno de los tipos de datos son tipos de datos definidos por el usuario o alias, porque todos tienen 0
como su valor.
Vamos a crear un tipo de datos de alias y luego ver cómo aparece en los resultados.
Cree el tipo de datos de alias:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Ahora ejecutemos la consulta de nuevo.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Resultado:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | | SSN | 11 | 0 | 0 | 1 | +------------------+--------------+-------------+---------+-------------------+
Aparece el nuevo tipo de datos (en la parte inferior). También tiene un valor de 1
en el is_user_defined
columna.
Los sys.systypes
Ver
También hay un sys.systypes
Vista de compatibilidad del sistema, que solo se proporciona para la compatibilidad con versiones anteriores. Esto se debe a que systypes
era el nombre de una tabla del sistema en SQL Server 2000, y podría haber muchos sistemas heredados con código que hiciera referencia a esa tabla.
Microsoft ha indicado que sys.systypes
La vista de compatibilidad del sistema se eliminará en una versión futura de Microsoft SQL Server y, por lo tanto, se recomienda evitar el uso de esta vista en el nuevo trabajo.
En otras palabras, use sys.types
en cambio si puedes.
Pero si todavía usa una versión anterior de SQL Server, deberá usar sys.systypes
.
Tenga en cuenta que sys.systypes
contiene diferentes columnas/nombres de columna para sys.types
, por lo que los nombres de las columnas que usé en el ejemplo anterior no funcionarán.
Todavía puede seleccionar todas las columnas usando el asterisco (*
) carácter comodín aunque:
SELECT * FROM sys.systypes;