sql >> Database >  >> RDS >> Sqlserver

Een lijst met gegevenstypen retourneren in SQL Server (T-SQL)

Als u ooit een lijst met gegevenstypen in SQL Server nodig heeft, kunt u daarvoor een van de systeemweergaven gebruiken.

In het bijzonder kunt u de sys.types . gebruiken systeemcatalogus bekijken. Deze weergave retourneert alle door het systeem geleverde en door de gebruiker gedefinieerde gegevenstypen die in de database zijn gedefinieerd. Als u SQL Server 2000 sys.systypes . gebruikt zou het lukken.

Voorbeeld 1 – De sys.types Bekijk

De sys.types view is de beste om te gebruiken als u een latere versie van SQL Server dan SQL Server 2000 gebruikt.

De snelste/gemakkelijkste manier om de sys.types . te gebruiken weergave is om alles te selecteren. In dat geval kan uw code er als volgt uitzien:

SELECT * FROM sys.types;

Dit levert echter veel kolommen op waarin u wel of niet geïnteresseerd bent. U kunt het beperken tot alleen die kolommen waarin u geïnteresseerd bent.

Hier is een voorbeeld van het selecteren van enkele interessante kolommen:

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

Resultaat:

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

Dit zijn de datatypes binnen de huidige database. Als u overschakelt naar een andere database, kunt u andere resultaten krijgen (dit hangt grotendeels af van het feit of er door de gebruiker gedefinieerde gegevenstypen of aliasgegevenstypen zijn gedefinieerd en of deze al dan niet verschillen tussen de databases).

Voorbeeld 2 – Alias ​​en door de gebruiker gedefinieerde gegevenstypen

In het vorige voorbeeld heb ik de is_user_defined kolom. We kunnen zien dat geen van de gegevenstypen door de gebruiker gedefinieerde of aliasgegevenstypen zijn, omdat ze allemaal 0 hebben als hun waarde.

Laten we een alias-gegevenstype maken en dan kijken hoe het in de resultaten wordt weergegeven.

Maak het alias-gegevenstype:

CREATE TYPE SSN  
FROM varchar(11) NOT NULL;

Laten we de query nu opnieuw uitvoeren.

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

Resultaat:

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

Het nieuwe gegevenstype verschijnt (onderaan). Het heeft ook een waarde van 1 in de is_user_defined kolom.

De sys.systypes Bekijk

Er is ook een sys.systypes systeemcompatibiliteitsweergave, die alleen is bedoeld voor achterwaartse compatibiliteit. Dit komt omdat systypes was de naam van een systeemtabel in SQL Server 2000, en er kunnen veel oudere systemen zijn met code die naar die tabel verwijst.

Microsoft heeft aangegeven dat de sys.systypes systeemcompatibiliteitsweergave wordt verwijderd in een toekomstige versie van Microsoft SQL Server, en daarom raadt u aan deze weergave niet in nieuw werk te gebruiken.

Met andere woorden, gebruik sys.types in plaats daarvan als je kunt.

Maar als u nog steeds een eerdere versie van SQL Server gebruikt, moet u sys.systypes gebruiken .

Merk op dat sys.systypes bevat verschillende kolommen/kolomnamen voor sys.types , dus de kolomnamen die ik in het vorige voorbeeld heb gebruikt, werken niet.

U kunt nog steeds alle kolommen selecteren met de asterisk (* ) jokerteken echter:

SELECT * FROM sys.systypes;

  1. Beheerprogramma's voor SQL Server 2017

  2. Intel Xeon schaalbare processors en SQL Server 2017

  3. SQLite BESTAAT

  4. Splits de gegeven string en bereid de case-instructie voor