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

Come restituire un elenco di tipi di dati in SQL Server (T-SQL)

Se hai bisogno di ottenere un elenco di tipi di dati in SQL Server, puoi utilizzare una delle viste di sistema per farlo.

In particolare, puoi usare sys.types vista del catalogo di sistema. Questa vista restituisce tutti i tipi di dati forniti dal sistema e definiti dall'utente definiti nel database. Se stai usando SQL Server 2000 sys.systypes dovrebbe fare il trucco.

Esempio 1:sys.types Visualizza

I sys.types view è la migliore da utilizzare se utilizzi una versione di SQL Server successiva a SQL Server 2000.

Il modo più rapido/semplice per utilizzare sys.types vista è selezionare tutto. In tal caso il tuo codice potrebbe assomigliare a questo:

SELECT * FROM sys.types;

Tuttavia, questo restituisce molte colonne che potrebbero interessarti o meno. Puoi restringere il campo solo alle colonne che ti interessano.

Ecco un esempio di selezione di alcune colonne di interesse:

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

Risultato:

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

Questi sono i tipi di dati all'interno del database corrente. Se passi a un database diverso, potresti ottenere risultati diversi (questo dipenderà in gran parte dal fatto che siano stati definiti tipi di dati definiti dall'utente o tipi di dati alias e se differiscano o meno tra i database).

Esempio 2 – Alias ​​e tipi di dati definiti dall'utente

Nell'esempio precedente, ho incluso is_user_defined colonna. Possiamo vedere che nessuno dei tipi di dati è definito dall'utente o è un tipo di dati alias, perché tutti hanno 0 come il loro valore.

Creiamo un tipo di dati alias, quindi vediamo come appare nei risultati.

Crea il tipo di dati alias:

CREATE TYPE SSN  
FROM varchar(11) NOT NULL;

Ora eseguiamo di nuovo la query.

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

Risultato:

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

Viene visualizzato il nuovo tipo di dati (in basso). Ha anche un valore di 1 nel is_user_defined colonna.

Il sys.systypes Visualizza

C'è anche un sys.systypes visualizzazione della compatibilità del sistema, fornita solo per la compatibilità con le versioni precedenti. Questo perché systypes era il nome di una tabella di sistema in SQL Server 2000 e potrebbero esserci molti sistemi legacy con codice che fa riferimento a quella tabella.

Microsoft ha indicato che il sys.systypes la visualizzazione di compatibilità del sistema verrà rimossa in una versione futura di Microsoft SQL Server e pertanto si consiglia di evitare di utilizzare questa visualizzazione in un nuovo lavoro.

In altre parole, usa sys.types invece se potete.

Ma se stai ancora utilizzando una versione precedente di SQL Server, dovrai usare sys.systypes .

Nota che sys.systypes contiene diversi nomi di colonne/colonne in sys.types , quindi i nomi delle colonne che ho usato nell'esempio precedente non funzioneranno.

Puoi comunque selezionare tutte le colonne utilizzando l'asterisco (* ) carattere jolly però:

SELECT * FROM sys.systypes;