Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use NEWID() para criar um valor exclusivo no SQL Server


No SQL Server, você pode usar o NEWID() função para criar um valor único.

Mais especificamente, é uma função compatível com RFC4122 que cria um valor exclusivo do tipo identificador exclusivo .

O valor que NEWID() produz é um GUID de 16 bytes (Globally Unique IDentifier) ​​gerado aleatoriamente. Isso também é conhecido como UUID (Universalmente Unique IDentifier).


Exemplo 1 – Instrução SELECT básica


Aqui está um rápido SELECT instrução que retorna NEWID() :
SELECT NEWID() AS Result;

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

RFC4122 inclui 5 versões (ou subtipos). Posso dizer que este exemplo usa RFC4122 versão 4, por causa do 4 no local relevante. A versão 4 especifica que o GUID é gerado aleatoriamente ou pseudoaleatoriamente. Outras versões usam outros métodos para gerar o GUID.

Ao examinar todos os exemplos nesta página, você notará que todos são únicos, mas todos assumem a forma: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , o que significa que todos eles são GUIDs da versão 4 e, portanto, são todos gerados aleatoriamente ou pseudoaleatoriamente.

Exemplo 2 – Usando NEWID() com uma variável


Aqui está um exemplo de como colocar o valor de NEWID() em uma variável e, em seguida, selecionando-a.
DECLARE @myguid uniqueidentifier = NEWID();
SELECT @myguid AS Result;

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

Exemplo 3 – Converter em String


Aqui está um exemplo de conversão do valor da variável em uma string e, em seguida, imprimi-lo.
DECLARE @myguid uniqueidentifier = NEWID();
PRINT 'Value: '+ CONVERT(varchar(255), @myguid);

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

Exemplo 4 – Como um valor PADRÃO em um banco de dados


Aqui está um exemplo de uso de NEWID() como um valor padrão em uma coluna do banco de dados.
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;

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

Neste exemplo, crio uma tabela que inclui um identificador exclusivo coluna com seu valor padrão gerado por NEWID() . Em seguida, insiro dados nessa tabela. Quando faço isso, não especifico o CustomerId valor, então ele usa o valor padrão (que é gerado por NEWID() ). Por fim, seleciono o conteúdo da tabela, que mostra como usar o GUID que foi gerado com cada inserção de linha.

Exemplo 5 – Especificado explicitamente na declaração INSERT


Você também pode usar explicitamente NEWID() ao inserir os dados.

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

SELECT * FROM Customer;

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

Aqui eu uso NEWID() para gerar um ID exclusivo para cada linha e, portanto, o valor padrão não é usado. De qualquer forma, ambos são gerados por NEWID() assim, efetivamente obtemos o mesmo resultado – um GUID gerado aleatoriamente.