Come generare un nuovo Guid nella stored procedure?


94

Al momento ho una procedura memorizzata in cui voglio inserire nuove righe in una tabella.

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

Quindi la chiave primaria "id" è un Guid. So come creare una nuova GUID nel codice C # ma all'interno della stored procedure non sono sicuro di come generare le nuove GUID per i valori della chiave primaria.

Risposte:


179

Con SQL Server è possibile utilizzare la funzione NEWID . Stai usando C # quindi presumo che tu stia usando SQL Server. Sono sicuro che altri sistemi di database hanno funzioni simili.

select NEWID()

Se stai usando Oracle, puoi usare la SYS_GUID()funzione. Controlla la risposta a questa domanda: genera un GUID in Oracle



12

Non hai chiesto questo nella tua domanda, ma penso che valga la pena sottolineare che l'utilizzo di un GUID per una chiave primaria non è sempre una buona idea. Sebbene sia semplice, può influire sulle prestazioni quando un GUID viene utilizzato in un indice. Hai considerato l'utilizzo di una colonna Identità che è invece un valore intero?

Ecco un paio di articoli che potrebbero essere utili da leggere.


1
Si sono d'accordo con te. Tuttavia sto lavorando su un database sviluppato da qualcun altro. Tutte le tabelle precedenti utilizzavano un Guid come chiave primaria, quindi sto solo cercando di essere coerente. Anche se per le nuove tabelle forse dovrei valutare caso per caso. Grazie per le informazioni però.
Mr Cricket

1

In MySQL è UUID (). quindi la query sarebbe:

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

se vuoi riutilizzare l'uuid puoi farlo in questo modo:

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

entrambi testati in mysql
Fusca Software

1

Nel formato della domanda (individua il pedante!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.