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.