2009-06-18 6 views
9

J'ai une colonne uniqueidentifier dans une table et ce n'est pas une clé ou un index. Je veux définir la valeur par défaut en utilisant NEWSEQUENTIALID(), mais je reçois l'erreur:Erreur de définition newsequentialid() par défaut dans le serveur SQL 2008

Error validating default for column..

Mais si j'utilise NEWID() aucune erreur. Que se passe-t-il? EDIT: vous pouvez simplement ignorer la boîte de dialogue d'erreur et continuer.

+0

En SQL2014, vous devez utiliser le type de « uniqueidentifier » afin d'utiliser la méthode newsequentialid() et vous ne verrez pas les messages d'erreur. – HPWD

Répondre

9

acceptés réponse Citant this question.

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

Je trouve que vous pouvez simplement ignorer la fenêtre d'erreur et continuer. –

+0

La même chose m'est arrivée lorsque j'ai essayé d'ajouter un index 'clé unique' sur une colonne uniqueidentifier existante qui avait déjà été remplie avec sa valeur par défaut 'newsequentialid'. Lorsque j'ai sauvegardé la table, j'ai reçu le même avertissement, mais comme je l'ai mentionné, vous pouvez simplement cliquer sur 'oui' pour ignorer l'avertissement et la table sera enregistrée avec succès. Je ne peux pas penser à une circonstance ou à une raison pour laquelle cela ne réussirait pas. De toute façon, il ne devrait pas être appelé par défaut s'il s'agit juste de mettre à jour une table. – Triynko

+0

J'ai eu du mal à comprendre ce qu'il fallait changer pour que ça marche pour moi. Je trouve que c'est ALTER TABLE dbo.YourTable AJOUTER CONTRAINT DF_COLUMN DEFAULT newsequentialid() POUR COLONNE –

0

selon la documentation: http://msdn.microsoft.com/en-us/library/ms189786.aspx section Remarques:

... Lorsque NEWSEQUENTIALID() est utilisé dans les expressions par défaut, il ne peut pas être combiné avec d'autres opérateurs scalaires. Par exemple, vous ne pouvez pas exécuter les éléments suivants:

CREATE TABLE myTable (le dbo.myfunction DEFAULT de ColumnA (NEWSEQUENTIALID())) ...

Est-ce que cela répond à votre question?

+0

Non, j'utilise NEWSEQUENTIALID() par lui-même dans le champ par défaut dans le concepteur de table dans sql server management studio. NEWID() fonctionne cependant et je voulais juste savoir pourquoi. –

+0

Je vois ce que vous voulez dire, je viens de le tester et lors de la définition de NEWSEQUENTIALID() comme valeur par défaut dans SSMS 2008 j'obtiens une erreur mais après SQL "CREATE TABLE [dbo]. [Table_1] ([col1] [int] NOT NULL , [uuid] [uniqueidentifier] NON NULL DEFAULT (NEWSEQUENTIALID())) ON [PRIMARY] "s'exécute très bien et il n'y a pas d'erreur lors de la modification de la table plus tard. On dirait qu'un bug SSMS bug. – radekg

Questions connexes