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;