¿Cómo generar un nuevo Guid en un procedimiento almacenado?


93

Actualmente tengo un procedimiento almacenado en el que quiero insertar nuevas filas en una tabla.

insert into cars
(id, Make, Model)
values('A new Guid', "Ford", "Mustang")

Entonces, la 'id' de la clave primaria es un Guid. Sé cómo crear un nuevo Guid en código C #, pero dentro del procedimiento almacenado no estoy seguro de cómo generar los nuevos Guids para los valores de clave principal.

Respuestas:


178

Con SQL Server puede utilizar la función NEWID . Estás usando C #, así que supongo que estás usando SQL Server. Estoy seguro de que otros sistemas de bases de datos tienen funciones similares.

select NEWID()

Si está utilizando Oracle, puede utilizar la SYS_GUID()función. Consulte la respuesta a esta pregunta: Genere un GUID en Oracle



12

No preguntó sobre esto en su pregunta, pero creo que vale la pena señalar que usar un GUID para una clave principal no siempre es una buena idea. Si bien es simple, puede afectar el rendimiento cuando se usa un GUID en un índice. ¿Ha considerado utilizar una columna de identidad que sea un valor entero?

Aquí hay un par de artículos que pueden ser útiles para leer.


1
Sí estoy de acuerdo con usted. Sin embargo, estoy trabajando en una base de datos que desarrolló otra persona. Todas las tablas anteriores usaban un Guid como clave principal, así que solo intento ser coherente. Aunque para las nuevas tablas, tal vez debería evaluar caso por caso. Gracias por la informacion sin embargo.
Mr Cricket

1

En MySQL es UUID (). entonces la consulta sería:

insert into cars
(id, Make, Model)
values(UUID(), "Ford", "Mustang")

si desea reutilizar el uuid, puede hacerlo así:

set @id=UUID();
insert into cars
(id, Make, Model)
values(@id, "Ford", "Mustang");
select @id;

ambos probados en mysql
Fusca Software

1

En el formato de la pregunta (¡descubre el pedante!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.