In SQL Server puoi utilizzare NEWID()
funzione per creare un valore unico.
Più specificamente, è una funzione conforme a RFC4122 che crea un valore univoco di tipo identificatore univoco .
Il valore che NEWID()
produce è un GUID (Globally Unique IDentifier) generato casualmente a 16 byte. Questo è anche noto come UUID (Universaly Unique IDentifier).
Esempio 1 – Istruzione SELECT di base
Ecco un rapido SELECT
istruzione che restituisce NEWID()
:
SELECT NEWID() AS Result;
Risultato:
+--------------------------------------+ | Result | |--------------------------------------| | ab1b299b-9781-48d9-bedc-f238f6f5cc57 | +--------------------------------------+
RFC4122 include 5 versioni (o sottotipi). Posso dire che questo esempio utilizza RFC4122 versione 4, a causa di 4 nel punto pertinente. La versione 4 specifica che il GUID viene generato in modo casuale o pseudo-casuale. Altre versioni utilizzano altri metodi per generare il GUID.
Quando guardi tutti gli esempi in questa pagina, noterai che sono tutti unici, ma prendono tutti la forma: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , il che significa che sono tutti GUID della versione 4 e quindi sono tutti generati casualmente o pseudo-casuale.
Esempio 2:utilizzo di NEWID() con una variabile
Ecco un esempio di inserimento del valore di NEWID()
in una variabile, quindi selezionandola.
DECLARE @myguid uniqueidentifier = NEWID(); SELECT @myguid AS Result;
Risultato:
+--------------------------------------+ | Result | |--------------------------------------| | b6cfb25a-3f81-4e5a-a304-a4b44fb5dbeb | +--------------------------------------+
Esempio 3 – Converti in stringa
Ecco un esempio di conversione del valore della variabile in una stringa, quindi di stampa.
DECLARE @myguid uniqueidentifier = NEWID(); PRINT 'Value: '+ CONVERT(varchar(255), @myguid);
Risultato:
Value: 9A229A64-6FE0-417E-B07D-78444EA7DA5B
Esempio 4 – Come valore PREDEFINITO in un database
Ecco un esempio di utilizzo di NEWID()
come valore predefinito in una colonna del database.
USE Test; CREATE TABLE Customer ( CustomerId uniqueidentifier NOT NULL DEFAULT NEWID(), CustomerName varchar(70) NOT NULL, ); INSERT Customer (CustomerName) VALUES ('Peter Griffin'), ('Marge Simpson'), ('Borat Schwarzenegger'); SELECT * FROM Customer;
Risultato:
+--------------------------------------+----------------------+ | CustomerId | CustomerName | |--------------------------------------+----------------------| | 6f7f606f-9ed3-48f3-b70e-90d901591203 | Peter Griffin | | 79b470df-a317-4359-92af-35cd6394eb5d | Marge Simpson | | ed59b667-4cd4-4849-b697-ec2410d7b7ff | Borat Schwarzenegger | +--------------------------------------+----------------------+
In questo esempio creo una tabella che include un identificatore univoco colonna con il suo valore predefinito generato da NEWID()
. Quindi inserisco i dati in quella tabella. Quando lo faccio, non specifico il CustomerId
value, quindi utilizza il valore predefinito (che è generato da NEWID()
). Infine, seleziono il contenuto della tabella, che mostra l'utilizzo del GUID che è stato generato con ogni inserimento di riga.
Esempio 5 – Specificato esplicitamente nell'istruzione INSERT
Puoi anche usare esplicitamente NEWID()
durante l'inserimento dei dati.
In questo modo:
INSERT Customer (CustomerId, CustomerName) VALUES (NEWID(), 'Bart Farnsworth'), (NEWID(), 'Bruce Norris'); SELECT * FROM Customer;
Risultato:
+--------------------------------------+----------------------+ | CustomerId | CustomerName | |--------------------------------------+----------------------| | 6f7f606f-9ed3-48f3-b70e-90d901591203 | Peter Griffin | | 79b470df-a317-4359-92af-35cd6394eb5d | Marge Simpson | | ed59b667-4cd4-4849-b697-ec2410d7b7ff | Borat Schwarzenegger | | a21e9a65-5efd-43ea-bd8b-8040b379617a | Bart Farnsworth | | 5ae0e501-3944-4be0-bf8a-ba964d8d13ed | Bruce Norris | +--------------------------------------+----------------------+
Qui uso NEWID()
per generare un ID univoco per ogni riga e quindi il valore predefinito non viene utilizzato. In ogni caso, entrambi sono generati da NEWID()
quindi otteniamo effettivamente lo stesso risultato:un GUID generato casualmente.