Comment générer un nouveau Guid en procédure stockée?


94

J'ai actuellement une procédure stockée dans laquelle je souhaite insérer de nouvelles lignes dans une table.

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

Donc, la clé primaire «id» est un Guid. Je sais comment créer un nouveau Guid en code C #, mais dans la procédure stockée, je ne sais pas comment générer les nouveaux Guids pour les valeurs de clé primaire.

Réponses:


179

Avec SQL Server, vous pouvez utiliser la fonction NEWID . Vous utilisez C # donc je suppose que vous utilisez SQL Server. Je suis sûr que d'autres systèmes de base de données ont des fonctions similaires.

select NEWID()

Si vous utilisez Oracle, vous pouvez utiliser la SYS_GUID()fonction. Découvrez la réponse à cette question: générer un GUID dans Oracle



12

Vous n'avez pas posé de question à ce sujet dans votre question, mais je pense qu'il vaut la peine de souligner que l'utilisation d'un GUID pour une clé primaire n'est pas toujours une bonne idée. Bien que ce soit simple, cela peut affecter les performances lorsqu'un GUID est utilisé dans un index. Avez-vous envisagé d'utiliser une colonne d'identité qui est une valeur entière à la place?

Voici quelques articles qui pourraient être utiles à lire.


1
Oui je suis d'accord avec toi. Cependant, je travaille sur une base de données développée par quelqu'un d'autre. Toutes les tables précédentes utilisaient un Guid comme clé primaire, donc j'essaye juste d'être cohérent. Cependant, pour les nouvelles tables, je devrais peut-être évaluer au cas par cas. Merci néanmoins pour l'info.
Mr Cricket

1

Dans MySQL, c'est UUID (). donc la requête serait:

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

si vous voulez réutiliser l'uuid, vous pouvez le faire comme ceci:

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

tous deux testés dans mysql
Fusca Software

1

Au format de la question (repérez le pédant!)

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.