Ich habe eine Tabelle, in der ich ein INT IDENTITY(1,1) PRIMARY KEY-Feld und direkt daneben ein UNIQUEIDENTIFIER-Feld habe, das bei jedem Einfügen in die Tabelle automatisch zugewiesen werden soll. Ich habe versucht, DEFAULT NEWID() zu setzen, aber das funktioniert nur, wenn ich INSERT INTO TableName VALUES (DEFAULT, a, b, c, d, ...).
Was ich gerne machen würde, wäre, wenn ich in der Lage wäre NSERT INTO TableName VALUES (a, b, c, d, ...)
und das UNIQUEIDENTIFIER-Feld wird automatisch zugewiesen, genau wie das Primärschlüsselfeld. Ist das möglich? Bitte beachten Sie, dass ich dieses Feld nicht als Primärschlüssel (Teil eines Primärschlüssels) für die Tabelle haben möchte, auch wenn es eine gültige Lösung ist.
Antworten
Zu viele Anzeigen?Verwenden Sie dann die Spaltenliste und lassen Sie die Spalten PK und GUID weg.
INSERT INTO TableName (col3, col4, col5, ...)
VALUES (a, b, c, d, ...) a
Die Verwendung von DEFAULT umgeht das Fehlen einer Spaltenliste, was ohnehin die beste Vorgehensweise ist. Was ist zum Beispiel, wenn Sie Spalten neu anordnen oder hinzufügen? Und die Verwendung eines Triggers ist nicht optimal oder skalierbar
Edit: Die Verwendung eines Triggers ist ein Workaround, um die Best Practice zu umgehen... und lässt sich nicht so gut skalieren
Gbn hat Recht. Ich möchte nur noch ein paar weitere Punkte hinzufügen, die Sie berücksichtigen müssen.
Wenn Sie eine eindeutige ID für Ihre Tabelle haben, warum sollten Sie dann einen UNIQUEIDENTIFIER wollen oder brauchen? Sie sollten wahrscheinlich das eine oder das andere als PK wählen, aber nicht beides. Wenn Sie einen Standard für die Datenbank wählen, wählen Sie außerdem NEWSEQUENTIALID() anstelle von NEWID().
Es sollte der Standardwert im Tabellenschema sein. Sie brauchen sich also nicht um diese Spalte zu kümmern, nachdem Sie den Standardwert festgelegt haben.
Öffnen Sie das Tabellenentwurfsfenster und wählen Sie die Spalte, die die GUID-Informationen enthalten soll. Weitere Informationen finden Sie in der folgenden Abbildung.
Wenn Sie also (newID()) als Standardwert festlegen, können Sie den Datensatz einfügen, ohne diesen Spaltennamen in Ihre Einfügeanweisung aufzunehmen.
Bitte lassen Sie mich wissen, falls es Unklarheiten gibt.