sql >> Databasteknik >  >> RDS >> Sqlserver

Använd NEWID() för att skapa ett unikt värde i SQL Server

I SQL Server kan du använda NEWID() funktion för att skapa ett unikt värde.

Mer specifikt är det en RFC4122-kompatibel funktion som skapar ett unikt värde av typen uniqueidentifier .

Värdet som NEWID() producerar är en slumpmässigt genererad 16-byte GUID (Globally Unique IDentifier). Detta är också känt som ett UUID (Universally Unique IDentifier).

Exempel 1 – Grundläggande SELECT-sats

Här är en snabb SELECT uttalande som returnerar NEWID() :

SELECT NEWID() AS Result;

Resultat:

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

RFC4122 innehåller 5 versioner (eller undertyper). Jag kan säga att det här exemplet använder RFC4122 version 4, på grund av 4 på relevant plats. Version 4 anger att GUID genereras slumpmässigt eller pseudo-slumpmässigt. Andra versioner använder andra metoder för att generera GUID.

När du tittar på alla exemplen på den här sidan kommer du att märka att de alla är unika, men de har alla formen: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , vilket betyder att de alla är version 4 GUID, och därför är de alla slumpmässigt eller pseudoslumpmässigt genererade.

Exempel 2 – Använda NEWID() med en variabel

Här är ett exempel på hur du sätter värdet på NEWID() till en variabel och välj den sedan.

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

Resultat:

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

Exempel 3 – Konvertera till sträng

Här är ett exempel på att konvertera variabelvärdet till en sträng och sedan skriva ut det.

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

Resultat:

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

Exempel 4 – Som ett DEFAULT-värde i en databas

Här är ett exempel på hur du använder NEWID() som standardvärde i en databaskolumn.

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 det här exemplet skapar jag en tabell som innehåller en uniqueidentifier kolumn med dess standardvärde genererat av NEWID() . Jag infogar sedan data i den tabellen. När jag gör detta anger jag inte CustomerId värde, så det använder standardvärdet (som genereras av NEWID() ). Slutligen väljer jag innehållet i tabellen, som visar användning av GUID som genererades med varje radinfogning.

Exempel 5 – Explicit specificerat i INSERT-satsen

Du kan också uttryckligen använda NEWID() när du infogar data.

Så här:

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

Här använder jag NEWID() för att generera ett unikt ID för varje rad, och därför används inte standardvärdet. Oavsett vilket, båda genereras av NEWID() så vi får faktiskt samma resultat – en slumpmässigt genererad GUID.


  1. Varaktighet för data i en global temporär tabell?

  2. Skillnaden mellan INSTR() och LOCATE() i MariaDB

  3. Ta bort flera rader genom att markera kryssrutor med PHP

  4. SQL Server Performance File IO-statistik