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

Brug NEWID() til at oprette en unik værdi i SQL Server

I SQL Server kan du bruge NEWID() funktion til at skabe en unik værdi.

Mere specifikt er det en RFC4122-kompatibel funktion, der skaber en unik værdi af typen uniqueidentifier .

Værdien, der NEWID() producerer er en tilfældigt genereret 16-byte GUID (Globally Unique IDentifier). Dette er også kendt som en UUID (Universally Unique IDentifier).

Eksempel 1 – Grundlæggende SELECT-erklæring

Her er en hurtig SELECT sætning, der returnerer NEWID() :

SELECT NEWID() AS Result;

Resultat:

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

RFC4122 inkluderer 5 versioner (eller undertyper). Jeg kan se, at dette eksempel bruger RFC4122 version 4 på grund af 4 på det relevante sted. Version 4 specificerer, at GUID'et er tilfældigt eller pseudo-tilfældigt genereret. Andre versioner bruger andre metoder til at generere GUID.

Når du ser på alle eksemplerne på denne side, vil du bemærke, at de alle er unikke, men de har alle formen: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , hvilket betyder, at de alle er version 4 GUID'er, og derfor er de alle tilfældigt eller pseudo-tilfældigt genereret.

Eksempel 2 – Brug af NEWID() med en variabel

Her er et eksempel på at sætte værdien af ​​NEWID() ind i en variabel, og vælg den derefter.

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

Resultat:

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

Eksempel 3 – Konverter til streng

Her er et eksempel på at konvertere variabelværdien til en streng og derefter udskrive den.

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

Resultat:

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

Eksempel 4 – Som en DEFAULT-værdi i en database

Her er et eksempel på brug af NEWID() som standardværdi i en databasekolonne.

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;

Resultat:

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

I dette eksempel opretter jeg en tabel, der indeholder en uniqueidentifier kolonne med dens standardværdi genereret af NEWID() . Jeg indsætter derefter data i den tabel. Når jeg gør dette, angiver jeg ikke CustomerId værdi, så den bruger standardværdien (som er genereret af NEWID() ). Til sidst vælger jeg indholdet af tabellen, som viser brug det GUID, der blev genereret med hver rækkeindsættelse.

Eksempel 5 – Eksplicit specificeret i INSERT-erklæringen

Du kan også udtrykkeligt bruge NEWID() ved indsættelse af data.

Sådan:

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

SELECT * FROM Customer;

Resultat:

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

Her bruger jeg NEWID() for at generere et unikt ID for hver række, og derfor bruges standardværdien ikke. Uanset hvad, er begge genereret af NEWID() så vi effektivt får det samme resultat – en tilfældigt genereret GUID.


  1. Oracle SQL - Sådan hentes de højeste 5 værdier af en kolonne

  2. Hvordan kan jeg indsætte data i en MySQL-database?

  3. Enhver måde at indsætte eller opdatere SQLBulkCopy på, hvis den findes?

  4. ACOS() Funktion i Oracle