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

Utilizzare NEWID() per creare un valore univoco in SQL Server

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.