sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo devolver una lista de tipos de datos en SQL Server (T-SQL)

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;