2010-10-14 10 views
70

Ich habe derzeit eine gespeicherte Prozedur, in der ich neue Zeilen in eine Tabelle einfügen möchte.Wie generiert man eine neue Guid in der gespeicherten Prozedur?

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

Also ist der Primärschlüssel 'id' ein Guid. Ich weiß, wie man ein neues Guid in C# -Code erstellt, aber innerhalb der gespeicherten Prozedur bin ich nicht sicher, wie die neuen Guids für die Primärschlüsselwerte generiert werden.

Kann mir bitte jemand helfen?

Danke!

Antwort

140

Mit SQL Server können Sie die Funktion NEWID verwenden. Sie verwenden C#, also nehme ich an, dass Sie SQL Server verwenden. Ich bin sicher, dass andere Datenbanksysteme ähnliche Funktionen haben.

select NEWID() 

Wenn Sie mit Oracle können Sie die SYS_GUID()-Funktion verwenden. Schauen Sie sich die Antwort auf diese Frage: Generate a GUID in Oracle

25

Versuchen Sie folgendes:

SELECT NewId() 
12

Sie darüber nicht in Frage fragte, aber ich denke, es ist darauf hinzuweisen ist, dass für einen Primärschlüssel ein GUID ist nicht immer eine gute Idee. 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 Identity column zu verwenden, die ein ganzzahliger Wert ist?

Hier sind ein paar Artikel, die hilfreich sein könnten, zu lesen.

+0

Ja, ich stimme Ihnen zu. Ich arbeite jedoch an einer Datenbank, die jemand anders entwickelt hat. Alle vorherigen Tabellen verwendeten einen Guid als Primärschlüssel, also versuche ich nur, konsistent zu sein. Für neue Tabellen sollte ich vielleicht von Fall zu Fall entscheiden. Danke für die Info. –

1

In MySQL ist UUID(). so die Abfrage wäre:

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

, wenn Sie die UUID wiederverwenden möchten Sie es wie folgt tun:

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

beide in mysql getestet –

Verwandte Themen