Questo articolo riguarda molti tipi di dati SQL diversi che utilizziamo quando lavoriamo con SQL Server. Inizieremo con una rapida panoramica e passare attraverso alcune cose come categorie di tipi di dati, quali oggetti possiamo lavorare con, e come creare i nostri tipi di dati personalizzati.
Panoramica dei tipi di dati SQL
Per dare il via alle cose, parliamo di cosa è un tipo di dati. Se dovessi definirlo, direi che il tipo di dati determina il tipo, la dimensione e l’intervallo di dati che possono essere memorizzati in un oggetto., Quindi, questo ci porta a una questione di oggetti che hanno tipi di dati:
- Colonne
- Variabili
- Espressioni
- Parametri
Questi quattro tipi di dati SQL di oggetti sono della massima importanza. Le colonne sono ovviamente per le tabelle. Ogni volta che creiamo una variabile, dobbiamo anche assegnare un tipo di dati ad esso. Oltre a questi, abbiamo espressioni e parametri per concludere l’elenco degli oggetti che conserveranno i dati e quindi dobbiamo specificare quale tipo di dati conterranno.,
Andando avanti, vediamo le tre categorie di tipi di dati:
- Tipi di dati incorporati
- Tipi di dati alias definiti dall’utente
- Tipi di dati CLR (Common Language runtime) definiti dall’utente
Non c’è molto da dire sulla prima categoria. Questi sono tipi di dati a cui siamo tutti abituati. Di seguito è riportato un grafico che elenca i tipi di dati incorporati ben noti e i loro intervalli:
- Nota: il tipo di dati SQL di testo, Ntext e Immagine verrà rimosso in una versione futura di SQL Server. Si consiglia di evitare di utilizzare questi tipi di dati nel nuovo lavoro di sviluppo., Utilizzare invece i tipi di dati varchar(max), nvarchar(max) e varbinary(max).
Successivamente, abbiamo quello che abbiamo menzionato all’inizio, e quelli sono tipi di dati alias definiti dall’utente che ci permettono di creare i nostri tipi di dati in base all’elenco incorporato sopra.
L’ultima categoria è definita dall’utente common Language Runtime (CLR) tipi di dati che ci permettono di creare i nostri tipi di dati utilizzando il.NET Framework., Questo è un po ‘ più complicato di quanto sopra e richiede competenze di programmazione per costruire un assembly, registrare quell’assembly all’interno di SQL Server, creare un nuovo tipo di dati SQL basato su quell’assembly e quindi possiamo iniziare a utilizzare il tipo di dati appena creato in SQL Server.
Considerazioni sui tipi di dati SQL
Passiamo alla sezione successiva che è fondamentalmente solo teoria, ma sicuramente qualcosa a cui dovresti pensare quando memorizzi i dati in modo permanente o temporaneo.,
Conversione
Come sviluppatore di database, una delle routine più comuni durante la scrittura di codice è la conversione. La conversione avviene quando i dati di un oggetto vengono spostati, confrontati o combinati con i dati di un altro oggetto. Queste conversioni possono avvenire automaticamente, ciò che chiamiamo conversione implicita in SQL Server o manualmente che è noto come conversione esplicita che significa fondamentalmente scrivere codice specificamente per fare qualcosa. Una regola empirica utile è che la conversione esplicita è sempre migliore della conversione implicita perché rende il codice più leggibile., Ora che stiamo parlando di conversioni, vale la pena menzionare anche le cose che possono aiutarci con la conversione esplicita come le funzioni CAST e CONVERT utilizzate per convertire un’espressione di un tipo di dati SQL in un altro.
GUID
GUID è l’acronimo di Globally Unique Identifier. È un modo per garantire l’unicità ed è uno dei più grandi tipi di dati SQL. L’unico lato negativo di GUID è la dimensione di 16 byte. Pertanto, evitare gli indici sui GUID il più possibile.
NULL vs., NOT NULL
Se si attengono ai valori predefiniti di SQL Server, ciò potrebbe portare ad alcuni problemi di integrità dei dati. Dovresti sempre provare a specificare la proprietà nullability ogni volta che definisci le colonne nelle tabelle. Tornando alle basi, null significa sconosciuto o mancante che in pratica significa che non è 0 o una stringa vuota, e non possiamo fare il confronto null. Non possiamo dire null = null. Questo è un no può fare. C’è una proprietà chiamata ANSI_NULLS che possiamo impostare e controllare questo confronto con valori null.,
Colonne sparse
Questo tipo di colonna è solo una colonna normale in SQL Server ad eccezione di una proprietà impostata su on e indica a SQL Server di ottimizzare quella colonna per l’archiviazione null.
SQL tipo di dati linee guida
Prima di tutto, utilizzare sempre il giusto tipo di dati per il lavoro. Questo è molto più grande di quanto la maggior parte della gente pensi. Può avere un impatto significativo sull’efficienza, le prestazioni, lo storage e l’ulteriore sviluppo del database.
Se prendiamo i primi due, l’ottimizzatore di query genererà un piano di esecuzione a seconda dei tipi di dati utilizzati., Un esempio molto semplice potrebbe essere se stiamo usando il tipo di dati bigint in cui potremmo usare smallint – beh, molto probabilmente stiamo solo rallentando la query. La scelta del giusto tipo di dati SQL alla fine si tradurrà in query optimizer lavorare in modo più efficiente.
È una buona idea fornire documentazione per te stesso e per gli altri utilizzando il database sui tipi di dati che entrano negli oggetti. Va da sé, ma evita i tipi di dati deprecati, controlla sempre l’ultima documentazione di Microsoft per le notizie e gli aggiornamenti., Se c’è una leggera possibilità che lavorerai con dati non inglesi, usa sempre i tipi di dati Unicode. Inoltre, utilizzare i tipi di dati sysname per gli script amministrativi su nvarchar.
SQL data type examples
Passiamo a SSMS e vediamo come possiamo lavorare con alcuni dei tipi di dati menzionati nelle sezioni precedenti. Passeremo attraverso conversioni, colonne sparse e tipi di dati alias.
Conversione
Le funzioni Cast, Convert e Parse convertono un’espressione di un tipo di dati SQL in un altro., Di seguito è riportata una query di esempio che può essere utilizzata su un database “AdventureWorks” di esempio rispetto alla tabella” TransactionHistory”. Sta afferrando “ProductID” e”TransactionDate”da cui possiamo usare quella data della transazione per vedere come funziona la conversione:
Ecco il set di risultati di vari tipi di dati SQL:
Abbiamo usato la funzione Cast contro TransactionDate per convertire i valori in un nvarchar a una lunghezza di 30. Successivamente, abbiamo usato Convert per fare la stessa cosa, ma poi abbiamo anche specificato il formato 110 che ci dà uno stile di data specifico., Infine, abbiamo usato Parse che essenzialmente funziona allo stesso modo, ma possiamo applicare la cultura ad esso.,guardate il risultato di impostare e vedere quello che abbiamo ottenuto:
- Qui abbiamo la data e l’ora della transazione, in quanto si trova all’interno del database (tipo di dati datetime)
- questo è quello che sembra quando abbiamo gettato come una rappresentazione di testo
- la Conversione fa la stessa cosa, ma in questo caso, noi stiamo specificando come la Conversione di funzione di tradurre l’espressione (110 = gg-mm-aaaa)
- l’Analisi in questo caso, si traduce richiesta di dati utilizzando una cultura specifica (en-US)
Avanti, andiamo a vedere alcune cose extra che si possono fare con funzione di Analisi., Parse è ottimo con la conversione di stringhe in date e numeri interi. Per esempio, se si esegue l’istruzione Select qui sotto, sarà afferrare la corda 100.000 e di trasformarlo in un numero intero:
1
|
SELEZIONARE PARSE(‘100.,000’ COME INT) COME StringToInt;
|
Ecco il set di risultati:
Ora, diciamo che vogliamo fare la stessa cosa di nuovo, ma per qualche motivo, il numero intero ha un carattere che SQL Server non è in grado di convertire un numero intero:
1
|
SELEZIONARE PARSE(’10.,000′ COME INT) COME StringToIntError;
|
Ecco il messaggio di errore che genera:
Msg 9819, Livello 16, Stato 1, Riga 2
Errore di conversione della stringa valore ’10.000′ nel tipo di dati int, utilizzando la cultura “.,
Così, che cosa possiamo fare in questo caso è quello di utilizzare Try_Parse invece di regolare Analizzare perché se cerchiamo la stessa cosa di cui sopra, verrà restituito un valore null, piuttosto che l’errore:
1
|
SELEZIONARE TRY_PARSE(’10.,000′ AS INT) AS StringToIntNull;
|
Ecco come appare:
Questo metodo può essere usato come identificatore se qualcosa dovesse uscire prima di tempo AKA codifica difensiva. I tentativi possono essere applicati anche per gli altri due tipi di dati SQL.
Colonne sparse
Come ho detto all’inizio, le colonne sparse riducono i requisiti di spazio nullo., So, let’s jump to Object Explorer in our sample database, locate and query BillOfMaterials table to see how this works:
1
2
|
SELECT *
FROM Production.,BillOfMaterials bom;
|
Si noti che ci sono molti valori null all’interno delle colonne ProductAssemblyID e EndDate:
Pertanto, possiamo dire che questi due sono buoni candidati per colonne sparse., Così, in un modo per cambiare questo è sufficiente modificare le proprietà nella finestra di progettazione o possiamo farlo utilizzando il codice T-SQL da qui sotto:
1
2
3
4
|
ALTER TABLE Produzione.BillOfMaterials ALTER COLUMN ProductAssemblyID ADD SPARSE;
GO
ALTER TABLE Production.,BillOfMaterials ALTER COLUMN EndDate AGGIUNGERE SPARSE;
ANDARE
|
i Comandi non è stata completata la prima volta, ho avuto modo di perdere l’indice cluster (linea 7) e poi è andato tutto liscio:
Se torniamo all’Oggetto Explorer, aggiornare il BillOfMaterials tabella, possiamo vedere che i due sono ora contrassegnati come colonne di tipo sparse:
Bello, giusto. Una cosa più bella delle colonne sparse è chiamata set di colonne., Questo è utile in una situazione in cui abbiamo una tabella che contiene un gruppo di colonne per scopi speciali che vengono utilizzate raramente come nel nostro esempio ProductAssemblyID e ENDDATE colonne o AddressLine2, MiddleName, ecc. Quindi, l’idea con il set di colonne è che SQL Server prenderà tutte quelle colonne e ci darà una colonna XML generata che è aggiornabile. Ciò può portare a un aumento delle prestazioni dell’applicazione perché SQL Server può funzionare con il set di colonne anziché con ciascuna colonna sparse singolarmente.,
So, let’s add a column set using those two examples from above using the following command:
1
2
3
|
ALTER TABLE Production.,BillOfMaterials
AGGIUNGI SparseColumns XML COLUMN_SET PER ALL_SPARSE_COLUMNS;
ANDARE
|
Quindi, se si tenta di aggiungere una colonna, ma il nostro tavolo ha già le colonne di tipo sparse, sarà un errore:
Msg 1734, Livello 16, Stato 1, Riga 9
Non è possibile creare colonne di tipo sparse set ‘SparseColumns’ nella tabella ‘BillOfMaterials’ perché la tabella contiene già una o più colonne di tipo sparse. Un set di colonne sparse non può essere aggiunto a una tabella se la tabella contiene una colonna sparse.,
Se ti imbatti in questo, la soluzione più semplice è annullare colonne sparse. Questo può essere fatto facilmente nel designer. Basta aprirlo da Object Explorer, selezionare la colonna che avete bisogno, e all’interno della colonna di modifica proprietà È Analizzare la struttura di No, come illustrato di seguito:
Ora, se si esegue il comando una volta di più, sarà un successo:
La linea di fondo, non aggiungere colonne di tipo sparse in prima aggiungere un set di colonne prima e poi le colonne di tipo sparse. In questo modo non dovrai farlo nel modo più duro., Ciò che è veramente bello di questo, le nostre istruzioni DML come Select, Insert e Update possono ancora funzionare alla vecchia maniera facendo riferimento alle colonne individualmente o possiamo farlo usando i set di colonne.
Tipi di dati SQL definiti dall’utente
Concludiamo le cose con la creazione di un tipo di dati personalizzato. Stiamo andando a creare un tipo di dati alias che si basa su un altro tipo di dati. Diciamo solo che abbiamo bisogno di memorizzare gli URL nella nostra tabella e vogliamo creare un tipo di dati URL effettivo., All we need to do is execute the code from below:
1
2
3
|
CREATE TYPE url
FROM varchar(2048) NOT NULL
GO
|
URLs are just characters, so the varchar data type is perfect for this., Ho impostato il valore massimo su 2048 a causa di questo thread che ho trovato online che afferma che dovresti mantenere i tuoi URL sotto 2048 caratteri:
Possiamo vedere questo nuovo tipo di dati SQL se passiamo sopra Object Explorer, sotto Programmabilità, Tipi, Tipi di dati definiti dall’utente cartella:
Da qui, possiamo iniziare a utilizzare il tipo di dati appena creato., Just an example:
1
2
3
|
ALTER TABLE Purchasing.Vendor
ADD PurchasingWebServiceURL2 url NULL
GO
|
Conclusion
In this article, we learned how to implement SQL data types., Abbiamo dato il via con una panoramica solo per familiarizzare con alcuni dei tipi di dati incorporati. Poi abbiamo parlato di alcune cose da considerare quando si lavora con i tipi di dati e la conversione utilizzando le funzioni Cast, Convert e Parse. Abbiamo anche saltato in SSMS dove abbiamo mostrato come convertire un’espressione di un tipo di dati in un altro. Abbiamo esaminato come lavorare con colonne sparse e poi abbiamo anche visto come creare i nostri tipi di dati personalizzati.
Spero che questo articolo sui tipi di dati SQL sia stato informativo per te e ti ringrazio per averlo letto.,
- Autore
- Post Recenti
Ha scritto molto sia su SQL Shack che su ApexSQL Solution Center, su argomenti che vanno dalle tecnologie client come risoluzione 4K e tematizzazione, gestione degli errori, strategie di indicizzazione e monitoraggio delle prestazioni.
Bojan lavora presso ApexSQL a Nis, Serbia come parte integrante del team concentrandosi sulla progettazione, lo sviluppo e il test della prossima generazione di strumenti di database tra cui MySQL e SQL Server, e sia strumenti stand-alone e integrazioni in Visual Studio, SSMS, e VSCode.,
Vedi di più su Bojan a LinkedIn
Visualizza tutti i messaggi di Bojan Petrovic
- Visual Studio Codice per MySQL e MariaDB sviluppo – agosto 13, 2020
- AGGIORNAMENTO SQL sintassi – ha spiegato il 10 luglio 2020
- CREARE una VISTA SQL: Lavorare con le viste indicizzate in SQL Server – Marzo 24, 2020