В 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.