Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използвайте NEWID(), за да създадете уникална стойност в SQL Server

В SQL Server можете да използвате NEWID() функция за създаване на уникална стойност.

По-конкретно, това е функция, съвместима с RFC4122, която създава уникална стойност от тип uniqueidentifier .

Стойността, която NEWID() произвежда произволно генериран 16-байтов GUID (глобално уникален идентификатор). Това е известно още като UUID (Universally Unique IDentifier).

Пример 1 – Основен оператор SELECT

Ето един бърз SELECT оператор, който връща NEWID() :

SELECT NEWID() AS Result;

Резултат:

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

RFC4122 включва 5 версии (или подтипове). Мога да кажа, че този пример използва RFC4122 версия 4, поради 4 на съответното място. Версия 4 указва, че GUID се генерира произволно или псевдослучайно. Други версии използват други методи за генериране на GUID.

Когато разгледате всички примери на тази страница, ще забележите, че всички те са уникални, но всички приемат формата: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , което означава, че всички те са GUID от версия 4 и следователно всички те са произволно или псевдослучайно генерирани.

Пример 2 – Използване на NEWID() с променлива

Ето пример за поставяне на стойността на NEWID() в променлива, след което я изберете.

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

Резултат:

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

Пример 3 – Преобразуване в низ

Ето пример за преобразуване на стойността на променливата в низ и след това отпечатването му.

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

Резултат:

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

Пример 4 – Като стойност ПО ПОДРАЗБИРАНЕ в база данни

Ето пример за използване на NEWID() като стойност по подразбиране в колона на база данни.

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;

Резултат:

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

В този пример създавам таблица, която включва уникален идентификатор колона със стойността по подразбиране, генерирана от NEWID() . След това вмъквам данни в тази таблица. Когато правя това, не посочвам CustomerId стойност, така че използва стойността по подразбиране (която се генерира от NEWID() ). Накрая избирам съдържанието на таблицата, което показва използването на GUID, генериран с всяко вмъкване на ред.

Пример 5 – Изрично посочено в оператора INSERT

Можете също така изрично да използвате NEWID() при въвеждане на данните.

Като това:

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

SELECT * FROM Customer;

Резултат:

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

Тук използвам NEWID() за генериране на уникален идентификатор за всеки ред и следователно стойността по подразбиране не се използва. Така или иначе и двете се генерират от NEWID() така че ефективно получаваме същия резултат – произволно генериран GUID.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проактивни проверки на състоянието на SQL Server, част 4:ERRORLOG

  2. Заобиколно решение за DATEDIFF() игнориране на SET DATEFIRST в SQL Server (пример за T-SQL)

  3. SQL актуализация от една таблица в друга въз основа на съвпадение на идентификатор

  4. Преобразувайте varchar в datetime в SQL Server

  5. Как да използвам GROUP BY за конкатенация на низове в SQL Server?