La valeur par défaut est GUID dans SQL Server colonne de table
J'ai besoin d'ajouter une colonne à une table et mettre la clé primaire. Je utiliser un autre logiciel pour ajouter de nouvelles données. Pourquoi ne la colonne GIANGGUID
ont la valeur 00000000-0000-0000-0000-000000000000
?
ALTER TABLE dbo.Test
ADD [GIANGGUID] UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY;
Quelle est la question???
Pourquoi la colonne GIANGGUID a de la valeur que 00000000-0000-0000-0000-000000000000?
La plupart du temps est une mauvaise pratique d'utiliser un GUID comme clé primaire dans SQL Server voir cette réponse stackoverflow.com/questions/11938044/...
Nous aurons besoin de savoir exactement comment vous insérez la ligne qui a 00000000-0000-0000-0000-000000000000 GUID. Et si vous avez inséré avant ou après que vous avez ajouté votre défaut. Ce n'est pas vraiment clair à partir de votre question. (Aussi, si vous êtes en utilisant un GUID comme clé primaire, vous devez être prudent, il y a beaucoup de variables à prendre en compte, mais
Êtes-vous d'utiliser un ORM? Si oui, lequel? De toute façon, il semble que votre insert est l'insertion de cette valeur explicitement de sorte que le défaut ne vient jamais.
Pourquoi la colonne GIANGGUID a de la valeur que 00000000-0000-0000-0000-000000000000?
La plupart du temps est une mauvaise pratique d'utiliser un GUID comme clé primaire dans SQL Server voir cette réponse stackoverflow.com/questions/11938044/...
Nous aurons besoin de savoir exactement comment vous insérez la ligne qui a 00000000-0000-0000-0000-000000000000 GUID. Et si vous avez inséré avant ou après que vous avez ajouté votre défaut. Ce n'est pas vraiment clair à partir de votre question. (Aussi, si vous êtes en utilisant un GUID comme clé primaire, vous devez être prudent, il y a beaucoup de variables à prendre en compte, mais
NEWSEQUENTIALID()
peut être un meilleur choix que NEWID()
. Encore mieux serait probablement d'un simple incrememnting entier, si vous pouvez le gérer.)Êtes-vous d'utiliser un ORM? Si oui, lequel? De toute façon, il semble que votre insert est l'insertion de cette valeur explicitement de sorte que le défaut ne vient jamais.
OriginalL'auteur Giang Nguyen | 2015-12-16
Vous devez vous connecter pour publier un commentaire.
Plusieurs choses se passent ici.
Si vous suffit d'ajouter une colonne avec une valeur par défaut à l'aide de cette requête:
Vous obtiendrez la valeur NULL pour les colonnes existantes, car NULL sont autorisées et newid() pour les nouvelles lignes insérées:
Maintenant, si vous ajoutez une nouvelle colonne avec not NULL:
Depuis que la colonne ne peut pas être NULL, la contrainte par DÉFAUT est utilisé et newid() est insérée pour chaque ligne existante:
La même chose se produit lorsque vous ajoutez une Clé Primaire parce que le psy ne peut pas être NULL et newid() sera ajoutée aussi bien avec cet ALTER:
Il n'y a aucune raison de se retrouver avec
00000000-0000-0000-0000-000000000000
à moins que quelque chose qui n'a pas été mentionné le faire ou de le transformer.Maintenant, si nous mettons ce problème de côté, vous ne devriez pas envisager d'utiliser un type UNIQUEIDENTIFIER comme Clé Primaire. GUID sont:
Si vous avez besoin de quelque chose d'aléatoire et unique comme un GUID dans votre table pour certaines raisons, vous pouvez conserver cette colonne sans PK et aussi d'ajouter un supplément unique et séquentiel de l'ID de la colonne bigint avec l'identité) comme vous le PK.
Des Données De L'Échantillon:
Modifier pour aller dans le logiciel d'insertion question... (voir GUID de 00000000-0000-0000-0000-000000000000 provoquant la fusion de l'indice de violation)
Renommer la table:
Ajouter une nouvelle colonne:
ou:
Créer une vue sans GIANGGUID:
Lorsque le logiciel fera de son insertion ne pas voir GIANGGUID et de ne pas essayer d'insérer quelque chose automatiquement.
comment insérer la nouvelle ligne ? votre code probablement le remplacer avec 000000.
Je n'ai pas la permission de modifier le code. Je viens d'être autorisé à ajouter une colonne est GUID pour le tableau de suivi des
le code utilisé pour insérer de nouvelles lignes probabably ajout le 0000. Ce logiciel est utilisé pour insérer des lignes dans ta table ?
J'ai ajouté un nouveau champ est GIANGGUID, elle ne dépend pas de logiciel pour insérer des données car il s'auto générer par newid () ou newsequentialid ()
OriginalL'auteur Julien Vavasseur
Avant d'utiliser un GUId en tant que primaire, vous devriez jeter un oeil à ce post :
La plupart du temps est une mauvaise pratique d'utiliser un GUID comme clé primaire dans SQL Server.
J'ai édité mon post
Je ne sais pas qui vous pouvez vraiment dire "la plupart du temps" c'est une mauvaise pratique. Il y a des avantages et des inconvénients pour chacun d'eux, et vous pouvez trouver beaucoup de messages de blog tombant de chaque côté par googler "guid ou int primary key"
Avec SQL Server si vous avez un guid en tant que clé primaire et de l'index cluster sur ce champ (par défaut lorsque vous créez une clé primaire), il va conduire à des problème de performance au fil du temps
OriginalL'auteur Thomas
J'ai passé beaucoup de temps à essayer de comprendre cela. Il semble que vous devez le format suivant pour une colonne dérivée d'être un GUID. (DT_GUID) "{00000000-0000-0000-0000-000000000000}"
OriginalL'auteur BilliD