sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan returneres en liste over datatyper i SQL Server (T-SQL)

Hvis du nogensinde har brug for at få en liste over datatyper i SQL Server, kan du bruge en af ​​systemvisningerne til at gøre netop det.

Især kan du bruge sys.types systemkatalogvisning. Denne visning returnerer alle systemleverede og brugerdefinerede datatyper defineret i databasen. Hvis du bruger SQL Server 2000 sys.systypes burde gøre tricket.

Eksempel 1 – sys.types Vis

sys.types view er den bedste at bruge, hvis du bruger en version af SQL Server, der er nyere end SQL Server 2000.

Den hurtigste/nemmeste måde at bruge sys.types på visning er at vælge alt. I så fald kan din kode se sådan ud:

SELECT * FROM sys.types;

Dette returnerer dog en masse kolonner, som du måske eller måske ikke er interesseret i. Du kan indsnævre det til kun de kolonner, du er interesseret i.

Her er et eksempel på valg af nogle kolonner af interesse:

SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

Resultat:

+------------------+--------------+-------------+---------+-------------------+
| 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                 |
+------------------+--------------+-------------+---------+-------------------+

Disse er datatyperne i den aktuelle database. Hvis du skifter til en anden database, kan du få forskellige resultater (dette vil i høj grad afhænge af, om der er defineret nogen brugerdefinerede datatyper eller aliasdatatyper, og om de er forskellige mellem databaserne eller ej).

Eksempel 2 – Alias ​​og brugerdefinerede datatyper

I det foregående eksempel inkluderede jeg koden is_user_defined kolonne. Vi kan se, at ingen af ​​datatyperne er brugerdefinerede eller aliasdatatyper, fordi de alle har 0 som deres værdi.

Lad os oprette en aliasdatatype og derefter se, hvordan den vises i resultaterne.

Opret aliasdatatypen:

CREATE TYPE SSN  
FROM varchar(11) NOT NULL;

Lad os nu køre forespørgslen igen.

SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

Resultat:

+------------------+--------------+-------------+---------+-------------------+
| 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                 |
+------------------+--------------+-------------+---------+-------------------+

Den nye datatype vises (nederst). Den har også en værdi på 1 i is_user_defined kolonne.

sys.systypes Vis

Der er også en sys.systypes systemkompatibilitetsvisning, som kun leveres til bagudkompatibilitet. Dette er fordi systypes var navnet på en systemtabel i SQL Server 2000, og der kunne være mange ældre systemer derude med kode, der refererer til den tabel.

Microsoft har angivet, at sys.systypes systemkompatibilitetsvisning vil blive fjernet i en fremtidig version af Microsoft SQL Server, og anbefaler derfor, at du undgår at bruge denne visning i nyt arbejde.

Med andre ord, brug sys.types i stedet hvis du kan.

Men hvis du stadig bruger en tidligere version af SQL Server, skal du bruge sys.systypes .

Bemærk, at sys.systypes indeholder forskellige kolonner/kolonnenavne til sys.types , så de kolonnenavne, jeg brugte i det forrige eksempel, virker ikke.

Du kan stadig vælge alle kolonner ved hjælp af stjernen (* ) jokertegn dog:

SELECT * FROM sys.systypes;

  1. Beregning og pladsbesparelse i PostgreSQL

  2. SQL INSERT-syntaks – Listet af DBMS

  3. Java - Hvordan kalder man en orakelprocedure med brugerdefinerede typer?

  4. Neo4j - Slet et forhold ved hjælp af Cypher