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!
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
Essaye ça:
SELECT NewId()
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.
- Effets sur les performances de l’utilisation de GUID en tant que clés primaires (SQL Server Magazine)
- Clés primaires: ID versus GUID (Jeff Atwood)
- Le coût des GUID en tant que clés primaires (article de Jimmy Nelson référencé par les deux autres articles)
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;
Dans le format de la question (repérez le pédant!)
insert into cars
(id, Make, Model)
values(NEWID(), "Ford", "Mustang")