sql >> Database >  >> RDS >> Sqlserver

Gebruik NEWID() om een ​​unieke waarde te creëren in SQL Server

In SQL Server kunt u de NEWID() . gebruiken functie om een ​​unieke waarde te creëren.

Meer specifiek is het een RFC4122-compatibele functie die een unieke waarde van het type uniqueidentifier creëert .

De waarde die NEWID() produceert is een willekeurig gegenereerde 16-byte GUID (Globally Unique IDentifier). Dit wordt ook wel een UUID (Universally Unique IDentifier) ​​genoemd.

Voorbeeld 1 – Basis SELECT-instructie

Hier is een korte SELECT statement dat NEWID() . retourneert :

SELECT NEWID() AS Result;

Resultaat:

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

RFC4122 bevat 5 versies (of subtypes). Ik kan zien dat dit voorbeeld RFC4122 versie 4 gebruikt, vanwege de 4 op de betreffende plek. Versie 4 specificeert dat de GUID willekeurig of pseudo-willekeurig wordt gegenereerd. Andere versies gebruiken andere methoden om de GUID te genereren.

Als je alle voorbeelden op deze pagina bekijkt, zul je merken dat ze allemaal uniek zijn, maar ze hebben allemaal de vorm: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , wat betekent dat het allemaal GUID's van versie 4 zijn en daarom allemaal willekeurig of pseudo-willekeurig worden gegenereerd.

Voorbeeld 2 – NEWID() gebruiken met een variabele

Hier is een voorbeeld van het plaatsen van de waarde van NEWID() in een variabele en selecteer deze vervolgens.

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

Resultaat:

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

Voorbeeld 3 – Converteren naar string

Hier is een voorbeeld van het converteren van de variabelewaarde naar een tekenreeks en deze vervolgens afdrukken.

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

Resultaat:

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

Voorbeeld 4 – Als STANDAARD waarde in een database

Hier is een voorbeeld van het gebruik van NEWID() als standaardwaarde in een databasekolom.

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;

Resultaat:

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

In dit voorbeeld maak ik een tabel met een uniqueidentifier kolom met de standaardwaarde gegenereerd door NEWID() . Vervolgens voeg ik gegevens in die tabel in. Wanneer ik dit doe, specificeer ik niet de CustomerId waarde, dus het gebruikt de standaardwaarde (die wordt gegenereerd door NEWID() ). Ten slotte selecteer ik de inhoud van de tabel, die laat zien dat de GUID wordt gebruikt die is gegenereerd met elke rij-invoeging.

Voorbeeld 5 – Expliciet gespecificeerd in de INSERT-instructie

U kunt ook expliciet NEWID() . gebruiken bij het invoeren van de gegevens.

Zoals dit:

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

SELECT * FROM Customer;

Resultaat:

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

Hier gebruik ik NEWID() om een ​​unieke ID voor elke rij te genereren, en daarom wordt de standaardwaarde niet gebruikt. Hoe dan ook, beide worden gegenereerd door NEWID() dus we krijgen in feite hetzelfde resultaat:een willekeurig gegenereerde GUID.


  1. Vensterfuncties en meer lokale aggregatie

  2. Lijst met tabellen in een PostgreSQL-schema

  3. Oracle Sequentietrigger maken

  4. verbind door clausule in regex_substr