2009-06-18 6 views
9

Ich habe eine Uniqueidentifier Spalte in einer Tabelle und es ist kein Schlüssel oder Index. Ich mag den Standardwert mit NEWSEQUENTIALID() setzen, aber ich habe den Fehler:Fehler beim Setzen von Newsequentialid() Standard in SQL Server 2008

Error validating default for column..

Aber wenn ich NEWID() kein Fehler verwenden. Was ist los?

EDIT: Sie können einfach den Fehlerdialog ignorieren und fortfahren.

+0

In SQL2014, können Sie den Datentyp als „Unique“ verwenden, um brauchen die NEWSEQUENTIALID() -Methode verwendet, und Sie werden keine Fehlermeldungen angezeigt werden. – HPWD

Antwort

9

Antwort von this question akzeptiert zitierend.

Workaround: create your table without specifying any default, and then type in this T-SQL statement in a normal query window and run it:

ALTER TABLE dbo.YourTable 
    ADD CONSTRAINT DF_SerialID DEFAULT newsequentialid() FOR SerialID 
+7

Ich finde, Sie können einfach das Fehlerfenster ignorieren und fortfahren. –

+0

Das gleiche passierte mir, als ich versuchte, einen eindeutigen Schlüsselindex für eine bestehende uniqueidentifier-Spalte hinzuzufügen, die bereits mit dem Standardwert newsequentialid gefüllt war. Als ich den Tisch gespeichert habe, habe ich die gleiche Warnung erhalten, aber wie bereits erwähnt, können Sie einfach auf "Ja" klicken, um die Warnung zu ignorieren und die Tabelle wird erfolgreich gespeichert. Ich kann mir keinen Umstand oder Grund vorstellen, warum es nicht gelingen würde. Es sollte sowieso nicht den Standard aufrufen, wenn es nur eine Tabelle aktualisiert. – Triynko

+0

Ich hatte anfangs Schwierigkeiten, herauszufinden, was ich ändern sollte, damit es für mich funktioniert. Ich finde es ist ALTER TABLE dbo.YourTable ADD CONSTRAINT DF_COLUMN STANDARD newsequentialid() FÜR SPALTE –

0

nach der Dokumentation: http://msdn.microsoft.com/en-us/library/ms189786.aspx Abschnitt Bemerkung:

... Wenn NEWSEQUENTIALID() in DEFAULT Ausdrücke verwendet wird, kann es nicht mit anderen skalaren Operatoren kombiniert werden.

CREATE TABLE myTable (ColumnA unique STANDARD dbo.myfunction (NEWSEQUENTIALID())) ...

, dass Ihre Frage nicht beantworten: Zum Beispiel, können Sie die folgenden nicht ausführen?

+0

Nein, ich verwende NEWSEQUENTIALID() selbst im Standardfeld im Tabellendesigner in SQL Server Management Studio. NEWID() funktioniert aber und ich wollte nur wissen warum. –

+0

Ich sehe, was Sie meinen, ich habe das gerade getestet und wenn ich NEWSEQUENTIALID() als Standardwert in SSMS 2008 setze, bekomme ich einen Fehler, aber SQL folgt "CREATE TABLE [dbo]. [Table_1] ([col1] [int] NOT NULL , [UUID] [Uniqueidentifier] NOT NULL DEFAULT (NEWSEQUENTIALID())) ON [PRIMARY] "läuft gut und es gibt keinen Fehler beim späteren Bearbeiten der Tabelle. Sieht aus wie ein SSMS-Fehler. – radekg