Wie erstelle ich eine neue Guid in einer gespeicherten Prozedur?

93

Ich habe derzeit eine gespeicherte Prozedur, in der ich neue Zeilen in eine Tabelle einfügen möchte.

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

Der Primärschlüssel 'id' ist also ein Guid. Ich weiß, wie man eine neue Guid in C # -Code erstellt, aber innerhalb der gespeicherten Prozedur bin ich mir nicht sicher, wie ich die neuen Guids für die Primärschlüsselwerte generieren soll.

Herr Cricket
quelle

Antworten:

178

Mit SQL Server können Sie die Funktion NEWID verwenden . Sie verwenden C #, daher gehe ich davon aus, dass Sie SQL Server verwenden. Ich bin sicher, dass andere Datenbanksysteme ähnliche Funktionen haben.

select NEWID()

Wenn Sie Oracle verwenden, können Sie die SYS_GUID()Funktion verwenden. Lesen Sie die Antwort auf diese Frage: Generieren Sie eine GUID in Oracle

Adam Porad
quelle
29

Versuche dies:

SELECT NewId()
BradB
quelle
12

Sie haben in Ihrer Frage nicht danach gefragt, aber ich denke, es ist erwähnenswert, dass die Verwendung einer GUID für einen Primärschlüssel nicht immer eine gute Idee ist. Es ist zwar einfach, kann jedoch die Leistung beeinträchtigen, wenn eine GUID in einem Index verwendet wird. Haben Sie darüber nachgedacht, stattdessen eine Identitätsspalte zu verwenden , die ein ganzzahliger Wert ist?

Hier sind einige Artikel, die hilfreich sein könnten, um sie zu lesen.

Adam Porad
quelle
1
Ja, ich stimme dir zu. Ich arbeite jedoch an einer Datenbank, die jemand anderes entwickelt hat. In allen vorherigen Tabellen wurde eine Guid als Primärschlüssel verwendet, daher versuche ich nur, konsistent zu sein. Für neue Tabellen sollte ich vielleicht von Fall zu Fall bewerten. Danke für die Infos.
Mr Cricket
1

In MySQL ist es UUID (). Die Abfrage wäre also:

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

Wenn Sie die UUID wiederverwenden möchten, können Sie dies folgendermaßen tun:

set @id=UUID();
insert into cars
(id, Make, Model)
values(@id, "Ford", "Mustang");
select @id;
Fusca Software
quelle
beide getestet in MySQL
Fusca Software
1

Im Format der Frage (Finde den Pedanten!)

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