sql >> Databáze >  >> RDS >> Sqlserver

Použijte NEWID() k vytvoření jedinečné hodnoty na serveru SQL Server

V SQL Server můžete použít NEWID() funkce k vytvoření jedinečné hodnoty.

Přesněji řečeno, je to funkce kompatibilní s RFC4122, která vytváří jedinečnou hodnotu typu uniqueidentifier .

Hodnota, kterou NEWID() produkuje je náhodně generovaný 16bajtový GUID (globálně jedinečný identifikátor). Toto je také známé jako UUID (Universally Unique IDentifier).

Příklad 1 – Základní příkaz SELECT

Zde je rychlý SELECT příkaz, který vrací NEWID() :

SELECT NEWID() AS Result;

Výsledek:

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

RFC4122 obsahuje 5 verzí (nebo podtypů). Mohu říci, že tento příklad používá RFC4122 verze 4, protože 4 na příslušném místě. Verze 4 uvádí, že GUID je generováno náhodně nebo pseudonáhodně. Jiné verze používají ke generování GUID jiné metody.

Když se podíváte na všechny příklady na této stránce, všimnete si, že jsou všechny jedinečné, ale všechny mají podobu: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , což znamená, že všechny jsou GUID verze 4, a proto jsou všechny náhodně nebo pseudonáhodně generovány.

Příklad 2 – Použití NEWID() s proměnnou

Zde je příklad vložení hodnoty NEWID() do proměnné a poté ji vyberte.

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

Výsledek:

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

Příklad 3 – Převést na řetězec

Zde je příklad převodu hodnoty proměnné na řetězec a jeho vytištění.

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

Výsledek:

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

Příklad 4 – Jako VÝCHOZÍ hodnota v databázi

Zde je příklad použití NEWID() jako výchozí hodnotu ve sloupci databáze.

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;

Výsledek:

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

V tomto příkladu vytvořím tabulku, která obsahuje jedinečný identifikátor sloupec s výchozí hodnotou vygenerovanou NEWID() . Do této tabulky pak vložím data. Když to udělám, neuvádím CustomerId hodnota, takže použije výchozí hodnotu (kterou generuje NEWID() ). Nakonec vyberu obsah tabulky, která ukazuje použití GUID, který byl vygenerován při každém vložení řádku.

Příklad 5 – Explicitně specifikováno v příkazu INSERT

Můžete také explicitně použít NEWID() při vkládání dat.

Takhle:

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

SELECT * FROM Customer;

Výsledek:

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

Zde používám NEWID() pro vygenerování jedinečného ID pro každý řádek, a proto se nepoužije výchozí hodnota. V obou případech jsou oba generovány pomocí NEWID() takže efektivně získáme stejný výsledek – náhodně vygenerovaný GUID.


  1. Získání opravných sad databáze

  2. Měl bych používat makra nebo kód VBA?

  3. TRUNC(číslo) Funkce v Oracle

  4. Návrh dočasné databáze se zvratem (živé vs. koncepty)