NEWID
y para qué se usa?
NEWID
es una función que genera un valor único cada vez que se invoca. El valor generado es de tipo uniqueidentifier
y sigue el formato de un GUID (por ejemplo: A2F3D839-B5C7-4D3D-94FB-4F7088B4C660
). Esta función se utiliza principalmente para:
Al ser prácticamente imposible que dos GUID generados por NEWID
sean iguales, se convierte en una herramienta ideal para garantizar la unicidad, incluso entre servidores distribuidos.
NEWID
NEWID()
No requiere ningún argumento y se invoca directamente para generar un nuevo GUID.
NEWID
Puedes utilizar NEWID
para generar un valor único de manera directa:
SELECT NEWID() AS GUIDGenerado;
Resultado:
GUIDGenerado
------------------------------------
A2F3D839-B5C7-4D3D-94FB-4F7088B4C660
Cada vez que se ejecuta, NEWID
produce un valor único diferente.
Puedes usar NEWID
como valor predeterminado para una columna de tipo uniqueidentifier
en una tabla. Por ejemplo, al crear una tabla Usuarios
con un identificador único para cada usuario:
CREATE TABLE Usuarios (
UsuarioID uniqueidentifier DEFAULT NEWID(),
Nombre NVARCHAR(100)
);
Con esta definición, cada vez que se inserte un nuevo registro sin especificar UsuarioID
, la columna tomará un GUID único generado automáticamente:
INSERT INTO Usuarios (Nombre) VALUES ('Juan Pérez');
Resultado:
UsuarioID | Nombre
---------------------------------------|----------
A45E1303-5CE2-46A9-91EB-1BF2B2E6F003 | Juan Pérez
Si deseas crear varios GUIDs de una sola vez, puedes usar un bucle WHILE
o un SELECT
con la función NEWID
:
SELECT TOP 5 NEWID() AS GUIDGenerado
FROM sys.objects;
Resultado:
GUIDGenerado
------------------------------------
BF9D9F4D-4A69-4A6D-93CE-C8A3E0DEFF57
57FB3FF6-B54F-4034-B69B-B55FA6C9196E
6D3A2D13-F75E-424C-9158-C89D0F5A4A58
B0D94F50-4184-4B5C-B2B4-6D6BB90D4DA4
D213D97C-B7DC-4C9D-91FB-92C56BAF5D8C
Esto genera 5 GUIDs únicos de ejemplo.
NEWID
para ordenar aleatoriamente los resultados
Puedes utilizar NEWID
en la cláusula ORDER BY
para ordenar filas de forma aleatoria, lo cual es útil para obtener muestras aleatorias de datos:
SELECT Nombre
FROM Empleados
ORDER BY NEWID();
Este comando reorganiza las filas en un orden aleatorio cada vez que se ejecuta.
Si deseas agregar una columna calculada que use NEWID
para generar valores únicos:
ALTER TABLE Productos ADD Identificador uniqueidentifier DEFAULT NEWID();
Esto agregará una columna Identificador
con valores únicos para cada fila nueva.
NEWID
no están ordenados secuencialmente, por lo que no son adecuados para indexación en grandes volúmenes de datos. Para índices más eficientes, considera usar NEWSEQUENTIALID()
, que genera GUIDs en un orden más predecible.
NEWID
es útil para garantizar unicidad, pero los GUIDs suelen ocupar más espacio que los enteros (INT
), lo que puede afectar el rendimiento si se usan como claves primarias.
NEWID()
no se puede utilizar directamente en columnas de índices únicos de tablas que usan la propiedad SPARSE
.
Para más información sobre NEWID
, consulta la documentación oficial de Microsoft.
Jorge García
Fullstack developer