Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisez NEWID() pour créer une valeur unique dans SQL Server

Dans SQL Server, vous pouvez utiliser le NEWID() fonction pour créer une valeur unique.

Plus précisément, il s'agit d'une fonction conforme à la RFC4122 qui crée une valeur unique de type uniqueidentifier .

La valeur que NEWID() produit est un GUID (Globally Unique IDentifier) ​​de 16 octets généré de manière aléatoire. Ceci est également connu sous le nom d'UUID (Universally Unique IDentifier).

Exemple 1 - Instruction SELECT de base

Voici un rapide SELECT instruction qui renvoie NEWID() :

SELECT NEWID() AS Result;

Résultat :

+--------------------------------------+
| Result                               |
|--------------------------------------|
| ab1b299b-9781-48d9-bedc-f238f6f5cc57 |
+--------------------------------------+

RFC4122 comprend 5 versions (ou sous-types). Je peux dire que cet exemple utilise RFC4122 version 4, à cause du 4 à l'endroit concerné. La version 4 spécifie que le GUID est généré de manière aléatoire ou pseudo-aléatoire. D'autres versions utilisent d'autres méthodes pour générer le GUID.

Lorsque vous regardez tous les exemples sur cette page, vous remarquerez qu'ils sont tous uniques, mais ils prennent tous la forme : xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , ce qui signifie qu'ils sont tous des GUID de version 4 et qu'ils sont donc tous générés de manière aléatoire ou pseudo-aléatoire.

Exemple 2 - Utilisation de NEWID() avec une variable

Voici un exemple de mise de la valeur de NEWID() dans une variable, puis en la sélectionnant.

DECLARE @myguid uniqueidentifier = NEWID();
SELECT @myguid AS Result;

Résultat :

+--------------------------------------+
| Result                               |
|--------------------------------------|
| b6cfb25a-3f81-4e5a-a304-a4b44fb5dbeb |
+--------------------------------------+

Exemple 3 - Convertir en chaîne

Voici un exemple de conversion de la valeur de la variable en chaîne, puis de son impression.

DECLARE @myguid uniqueidentifier = NEWID();
PRINT 'Value: '+ CONVERT(varchar(255), @myguid);

Résultat :

Value: 9A229A64-6FE0-417E-B07D-78444EA7DA5B

Exemple 4 - En tant que valeur DEFAULT dans une base de données

Voici un exemple d'utilisation de NEWID() comme valeur par défaut dans une colonne de base de données.

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;

Résultat :

+--------------------------------------+----------------------+
| CustomerId                           | CustomerName         |
|--------------------------------------+----------------------|
| 6f7f606f-9ed3-48f3-b70e-90d901591203 | Peter Griffin        |
| 79b470df-a317-4359-92af-35cd6394eb5d | Marge Simpson        |
| ed59b667-4cd4-4849-b697-ec2410d7b7ff | Borat Schwarzenegger |
+--------------------------------------+----------------------+

Dans cet exemple, je crée une table qui inclut un uniqueidentifier colonne avec sa valeur par défaut générée par NEWID() . J'insère ensuite des données dans cette table. Lorsque je fais cela, je ne spécifie pas le CustomerId valeur, il utilise donc la valeur par défaut (qui est générée par NEWID() ). Enfin, je sélectionne le contenu de la table, qui montre utiliser le GUID qui a été généré avec chaque insertion de ligne.

Exemple 5 - Spécifié explicitement dans l'instruction INSERT

Vous pouvez également utiliser explicitement NEWID() lors de l'insertion des données.

Comme ceci :

INSERT Customer (CustomerId, CustomerName)
VALUES
    (NEWID(), 'Bart Farnsworth'),
    (NEWID(), 'Bruce Norris');

SELECT * FROM Customer;

Résultat :

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

Ici, j'utilise NEWID() pour générer un ID unique pour chaque ligne, et donc la valeur par défaut n'est pas utilisée. Dans tous les cas, les deux sont générés par NEWID() nous obtenons donc effectivement le même résultat - un GUID généré aléatoirement.