J'ai l'erreur ci-dessous lorsque j'exécute le script suivant. Quelle est l'erreur et comment la résoudre?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Erreur:
Serveur: Msg 544, niveau 16, état 1, ligne 1
Impossible d'insérer une valeur explicite pour la colonne d'identité dans la table 'table' lorsque IDENTITY_INSERT est défini sur OFF.
sql
sql-server
sybase
Martin Clayton
la source
la source
Réponses:
Vous insérez des valeurs pour
OperationId
cela est une colonne d'identité.Vous pouvez activer l'insertion d'identité sur la table comme ceci afin de pouvoir spécifier vos propres valeurs d'identité.
la source
ne mettez pas de valeur à OperationID car il sera généré automatiquement. essaye ça:
la source
cela ne fonctionne que sur une seule table de base de données, par exemple si le nom de la table est étudiant, la requête ressemble à ceci
SET IDENTITY_INSERT student ON
la source
Faites très attention de ne pas définir IDENTITY_INSERT sur ON. Il s'agit d'une mauvaise pratique, sauf si la base de données est en mode maintenance et définie sur un seul utilisateur. Cela affecte non seulement votre insert, mais aussi ceux de toute autre personne essayant d'accéder à la table.
Pourquoi essayez-vous de mettre une valeur dans un champ d'identité?
la source
Il existe essentiellement 2 façons différentes d'INSERER des enregistrements sans avoir d'erreur:
1) Lorsque IDENTITY_INSERT est réglé sur OFF. La clé primaire ID " " NE DOIT PAS ÊTRE PRÉSENT
2) Lorsque IDENTITY_INSERT est défini sur ON. La clé primaire ID DOIT ÊTRE PRÉSENT
Comme dans l'exemple suivant de la même table créée avec une CLÉ PRIMAIRE D'IDENTITÉ:
1) Dans le premier exemple, vous pouvez insérer de nouveaux enregistrements dans la table sans obtenir d'erreur lorsque IDENTITY_INSERT est désactivé. La clé primaire « ID » NE DOIT PAS ÊTRE PRÉSENT des déclarations « INSERT INTO » et une valeur d'identification unique sera automatiquement ajouté: . Si l'ID est présent dans INSERT dans ce cas, vous obtiendrez l'erreur "Impossible d'insérer une valeur explicite pour identifier la colonne dans le tableau ..."
SORTIE du TABLEAU [dbo]. [Personnes] seront:
2) Dans le deuxième exemple, vous pouvez insérer de nouveaux enregistrements dans la table sans obtenir d'erreur lorsque IDENTITY_INSERT est activé. L' ID " PRIMARY KEY " DOIT ÊTRE PRÉSENT à partir des instructions "INSERT INTO" tant que la valeur ID n'existe pas déjà : si l'ID n'est PAS présent dans INSERT dans ce cas, vous obtiendrez l'erreur "La valeur explicite doit être spécifié pour la table des colonnes d'identité ... "
SORTIE du TABLEAU [dbo]. [Personnes] seront:
la source
Dans votre entité pour cette table, ajoutez le
DatabaseGenerated
attribut au-dessus de la colonne pour laquelle l'insertion d'identité est définie:Exemple:
la source
DatabaseGeneratedOption.Identity
et j'obtiens toujours l'erreur. C'est ma faute, je mets des pseudo-ID dans les nouvelles lignes pour les distinguer les uns des autres sur ma page Web, et j'espère simplement les annuler avant que leinsert
suffise.vous pouvez simplement utiliser cette instruction par exemple si le nom de votre table est School . Avant l'insertion, assurez-vous que identity_insert est défini sur ON et après l'insertion de la requête, désactivez identity_insert sur OFF
la source
Si vous utilisez Liquibase pour mettre à jour votre SQL Server, vous essayez probablement d'insérer une clé d'enregistrement dans un champ autoIncrement. En supprimant la colonne de l'insert, votre script devrait s'exécuter.
la source
Il y a un OperationId pré-mentionné dans votre requête qui ne devrait pas être là car il est incrémenté automatiquement
donc votre requête sera
la source
Une autre situation consiste à vérifier que la clé primaire est le même nom qu'avec vos classes où la seule différence est que votre clé primaire a un «ID» ajouté à elle ou à spécifier [clé] sur les clés primaires qui ne sont pas liées à la façon dont le la classe est nommée.
la source
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
dans votre colonne PrimaryKey et assurez-vous qu'elle est définie sur un type de données int . Si la colonne est la clé primaire et est définie sur IsIDentity sur true dans SQL, cette ligne de code n'est pas nécessaire[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
la source
La meilleure solution consiste à utiliser l'annotation
GeneratedValue(strategy = ...)
, c'est-à-direil indique que cette colonne est générée par la base de données en utilisant la stratégie IDENTITY et que vous n'avez pas besoin de vous en occuper - la base de données le fera.
la source
Si vous rencontrez ce problème lors de l'utilisation d'un serveur SQL avec le npm sequelize-typescript, assurez-vous d'ajouter
@AutoIncrement
à la colonne ID:la source
Et si vous utilisez Oracle SQL Developer pour vous connecter, n'oubliez pas d'ajouter / sqldev: stmt /
/ sqldev: stmt / set Identity_insert TABLE on;
la source
Je ne sais pas à quoi sert le "Insérer un tableau", mais si vous essayez simplement d'insérer des valeurs, essayez:
J'ai eu le même message d'erreur, mais je pense que cela devrait fonctionner. L'ID doit s'incrémenter automatiquement tant qu'il s'agit d'une clé primaire.
la source
J'ai résolu ce problème en créant un nouvel objet chaque fois que je veux ajouter quelque chose à la base de données.
la source
Notez que si vous fermez chaque ligne avec
;
, laSET IDENTITY_INSERT mytable ON
commande ne sera pas maintenue pour les lignes suivantes.c'est à dire
une requête comme
Donne l'erreur
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
Mais une requête comme celle-ci fonctionnera:
Il semble que la
SET IDENTITY_INSERT
commande ne soit valable que pour une transaction, et le;
signifiera la fin d'une transaction.la source
Le problème posé par l'utilisation de DBContext ou DBSet non typé si vous utilisez Interface et implémentez la méthode de savechanges de manière générique
Si tel est votre cas je vous propose par exemple de taper fortement DBContex
alors
.Savechanges
fonctionnerala source
Supprimez simplement les tableaux qui sont glissés dans votre fichier .dbml et faites-les à nouveau glisser. Puis Nettoyez la solution> Reconstruisez la solution> Générez la solution.
C'est ce qui a fonctionné pour moi.
Je n'ai pas fait le tableau par moi-même, j'utilisais VS et SSMS, j'ai suivi ce lien pour l'identité ASP.NET: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ ajout d'une identité aspnet à un projet de formulaires Web vide ou existant
la source