sql >> Base de Datos >  >> RDS >> Sqlserver

Use NEWID() para crear un valor único en SQL Server

En SQL Server, puede usar NEWID() función para crear un valor único.

Más específicamente, es una función compatible con RFC4122 que crea un valor único de tipo identificador único .

El valor que NEWID() produce es un GUID (identificador único global) de 16 bytes generado aleatoriamente. Esto también se conoce como UUID (Universally Unique IDentifier).

Ejemplo 1:instrucción SELECT básica

Aquí hay un SELECT rápido instrucción que devuelve NEWID() :

SELECT NEWID() AS Result;

Resultado:

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

RFC4122 incluye 5 versiones (o subtipos). Puedo decir que este ejemplo usa RFC4122 versión 4, debido al 4 en el lugar correspondiente. La versión 4 especifica que el GUID se genera de forma aleatoria o pseudoaleatoria. Otras versiones usan otros métodos para generar el GUID.

Cuando mire todos los ejemplos en esta página, notará que todos son únicos, pero todos tienen la forma: xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx , lo que significa que todos son GUID de la versión 4 y, por lo tanto, todos se generan aleatoria o pseudoaleatoriamente.

Ejemplo 2:uso de NEWID() con una variable

Aquí hay un ejemplo de poner el valor de NEWID() en una variable, luego seleccionándola.

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

Resultado:

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

Ejemplo 3:convertir a cadena

Este es un ejemplo de cómo convertir el valor de la variable en una cadena y luego imprimirlo.

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

Resultado:

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

Ejemplo 4:como valor predeterminado en una base de datos

Aquí hay un ejemplo del uso de NEWID() como valor predeterminado en una columna de la base de datos.

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

En este ejemplo, creo una tabla que incluye un identificador único columna con su valor predeterminado generado por NEWID() . Luego inserto datos en esa tabla. Cuando hago esto, no especifico el CustomerId valor, por lo que utiliza el valor predeterminado (que es generado por NEWID() ). Finalmente, selecciono el contenido de la tabla, que muestra el uso del GUID que se generó con cada inserción de fila.

Ejemplo 5:explícitamente especificado en la instrucción INSERT

También puede usar explícitamente NEWID() al insertar los datos.

Así:

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

Aquí uso NEWID() para generar una ID única para cada fila y, por lo tanto, no se utiliza el valor predeterminado. De cualquier manera, ambos son generados por NEWID() por lo que efectivamente obtenemos el mismo resultado:un GUID generado aleatoriamente.