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.

Monsieur Cricket
la source

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

Adam Porad
la source
29

Essaye ça:

SELECT NewId()
BradB
la source
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.

Adam Porad
la source
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;
Logiciel Fusca
la source
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")
Regianni
la source