web-dev-qa-db-fra.com

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

J'ai actuellement une procédure stockée dans laquelle je veux 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 je ne suis pas sûr de savoir comment générer les nouveaux Guids pour les valeurs de clé primaire.

Quelqu'un peut m'aider s'il vous plaît?

Merci!

86
Mr Cricket

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 fonction SYS_GUID() . Découvrez la réponse à cette question: Générer un GUID dans Oracle

170
Adam Porad

Essaye ça:

SELECT NewId()
29
BradB

Vous n'avez pas posé cette question dans votre question, mais je pense qu'il est utile 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.

12
Adam Porad

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;
1
Fusca Software

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

insert into cars
  (id, Make, Model)
  values(NEWID(), "Ford", "Mustang")
0
Regianni