Ik krijg de onderstaande foutmelding wanneer ik het volgende script uitvoer. Waar gaat de fout over en hoe kan deze worden opgelost?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Fout:
Server: Msg 544, Niveau 16, Staat 1, Lijn 1
Kan geen expliciete waarde voor identiteitskolom in tabel ‘tabel’ invoegen wanneer IDENTITY_INSERT is ingesteld op UIT.
Antwoord 1, autoriteit 100%
U voegt waarden in voor OperationId
dat een identiteitskolom is.
Je kunt het invoegen van identiteit in de tabel op deze manier inschakelen, zodat je je eigen identiteitswaarden kunt specificeren.
SET IDENTITY_INSERT Table1 ON
INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
(OperationID,
OpDescription,
FilterID)
VALUES (20,
'Hierachy Update',
1)
SET IDENTITY_INSERT Table1 OFF
Antwoord 2, autoriteit 13%
geef geen waarde aan OperationID omdat deze automatisch wordt gegenereerd. probeer dit:
Insert table(OpDescription,FilterID) values ('Hierachy Update',1)
Antwoord 3, autoriteit 12%
Als u deze fout op de SQL-server krijgt, voer dan deze query uit-
SET IDENTITY_INSERT tableName ON
Dit werkt alleen voor een enkele databasetabel
E.G Als de tabelnaam student
vervolgens als volgt uitzien:
SET IDENTITY_INSERT student ON
Als u deze foutmelding op uw webtoepassing krijgt of u entiteitsramework gebruikt, voert u deze query eerst uit op SQL Server en update uw Entity Model (
.edmx file
) Bouw je project en deze fout wordt opgelost
4, Autoriteit 8%
Wees zeer op hun hoede om identiteit_insert aan te staan. Dit is een slechte praktijk tenzij de database in de onderhoudsmodus staat en ingesteld op een enkele gebruiker. Dit beïnvloedt niet alleen uw inzetstuk, maar die van iedereen die probeert toegang te krijgen tot de tabel.
Waarom probeer je een waarde in een identiteitsveld te plaatsen?
5, Autoriteit 4%
Voeg in uw entiteit voor die tabel de DatabaseGenerated
Attribuut boven de kolom toe waarvoor identiteitsinzetstuk is ingesteld:
Voorbeeld:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
6, Autoriteit 4%
Er zijn eigenlijk 2 verschillende manieren om records in te voegen zonder een foutmelding te hebben:
1) Wanneer de identiteit_inert is uitgeschakeld. De primaire sleutel “ID” mag niet aanwezig zijn
2) Wanneer de identiteit_insert is ingesteld. De primaire sleutel “ID” moet aanwezig zijn
Vanaf het volgende voorbeeld van dezelfde tabel met een primaire tabel met een identiteit:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1) In het eerste voorbeeld kunt u nieuwe records in de tabel invoegen zonder een foutmelding te krijgen wanneer de identiteit_insert uit is. De primaire sleutel “ID” mag niet aanwezig zijn van het “Invoegen in” -aanduidingen en een unieke ID-waarde wordt automatisch toegevoegd: . Als de ID in dit geval van het inzetstuk aanwezig is, krijgt u de foutmelding “Kan de expliciete waarde niet invoegen voor het identificeren van kolom in de tabel …”
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
Output of Table [DBO]. [Personen] Wordt:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2) In het tweede voorbeeld kunt u nieuwe records in de tabel invoegen zonder een foutmelding te krijgen wanneer de identiteit_insert is ingeschakeld. De primaire sleutel “ID” moet aanwezig zijn van het “Invoegen in” -aanduidingen zolang de ID-waarde nog niet bestaat : als de ID niet aanwezig is in het inzetstuk In dit geval krijgt u de foutmelding “Expliciete waarde moet worden opgegeven voor identiteitskolomtafel …”
SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK');
Output of Table [DBO]. [Personen] Wordt:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN
7, Autoriteit 2%
U kunt deze verklaring eenvoudig gebruiken als uw tabelnaam school is.
Vóór Insertion zorgt ervoor dat Identity_insert is ingesteld op op en na het invoegen van query Turn Identity_insert Off
SET IDENTITY_INSERT School ON
/*
insert query
enter code here
*/
SET IDENTITY_INSERT School OFF
8, Autoriteit 2%
Merk op dat als u elke regel sluit met ;
, de SET IDENTITY_INSERT mytable ON
-opdracht niet voor de volgende regels.
i.e.
een query zoals
SET IDENTITY_INSERT mytable ON;
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole');
geeft de fout
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
Maar een query zoals dit zal werken:
SET IDENTITY_INSERT mytable ON
INSERT INTO mytable (VoucherID, name) VALUES (1, 'Cole')
SET IDENTITY_INSERT mytable OFF;
Het lijkt alsof de SET IDENTITY_INSERT
-opdracht alleen geldt voor een transactie en de ;
zal het einde van een transactie betekenen.
9
Als u Liquibase gebruikt om uw SQL Server bij te werken, probeert u waarschijnlijk een recordsleutel in een automatisch incrementveld in te voegen. Door de kolom uit het inzetstuk te verwijderen, moet uw script worden uitgevoerd.
<changeSet id="CREATE_GROUP_TABLE" >
<createTable tableName="GROUP_D">
<column name="GROUP_ID" type="INTEGER" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
</createTable>
</changeSet>
<changeSet id="INSERT_UNKNOWN_GROUP" >
<insert tableName="GROUP_D">
<column name="GROUP_ID" valueNumeric="-1"/>
...
</insert>
</changeSet>
Antwoord 10
Er is een eerder genoemde OperationId in uw zoekopdracht die er niet zou moeten zijn omdat deze automatisch wordt verhoogd
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
dus uw vraag wordt
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
Antwoord 11
iedereen geeft commentaar op SQL, maar wat is er gebeurd in EntityFramework? Ik heb het hele bericht gelezen en niemand heeft EF opgelost. Dus na een paar dagen een gevonden oplossing:
EF Core in de context om het model te maken is er een instructie zoals deze:modelBuilder.Entity<Cliente>(entity => { entity.Property(e => e.Id).ValueGeneratedNever();
dit levert ook de fout op, oplossing: je moet veranderen door ValueGeneratedOnAdd() en zijn werken!
Antwoord 12
Een andere situatie is om te controleren of de primaire sleutel dezelfde naamheeft als bij uw klassen, waarbij het enige verschil is dat er een ‘ID’ aan uw primaire sleutel is toegevoegd, of om [Sleutel] op te geven op primaire sleutels die niet gerelateerd zijn aan de naam van de klasse.
Antwoord 13
- Dit gebeurt wanneer u een (primaire sleutel) kolom hebt die niet is ingesteld op de identiteit van TRUE in SQL en u tijdens het insert geen expliciete waarde daarvan passeert. Het zal de eerste rij nemen, dan kan je de tweede rij niet invoegen, de fout verschijnt. Dit kan worden gecorrigeerd door deze regel van code toe te voegen
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
in uw Kolom in het Priminee en zorg ervoor dat de ingesteld is op een gegevenstype Int . Als de kolom de primaire sleutel is en is ingesteld op de isidentiteit om in SQL te zijn, is het niet nodig aan deze regel code[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
- Dit gebeurt ook wanneer u een kolom heeft die niet de primaire sleutel is, in SQL die is ingesteld op Identity to True, en in uw EF voegt u deze regelnummer
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
14
Als u dit probleem hebt bij het gebruik van een SQL-Server met het Sequelize-typescript NPM Zorg ervoor dat u @AutoIncrement
AAN ID-kolom toevoegen:
@PrimaryKey
@AutoIncrement
@Column
id!: number;
15
In mijn geval had ik een andere accommodatie als sleutel in de context voor mijn modelbouw.
modelBuilder.Entity<MyTable>().HasKey(t => t.OtherProp);
Ik moest de juiste id instellen
modelBuilder.Entity<MyTable>().HasKey(t => t.Id);
Antwoord 16
En als u Oracle SQL Developer gebruikt om verbinding te maken, vergeet dan niet om /sqldev:stmt/
toe te voegen
/sqldev:stmt/ stel identity_insert TABLE in op;
Antwoord 17
Ik weet niet zeker wat het gebruik van de “Tabel invoegen” is, maar als je alleen wat waarden probeert in te voegen, probeer dan:
Insert Into [tablename] (OpDescription,FilterID)
values ('Hierachy Update',1);
Ik kreeg dezelfde foutmelding, maar ik denk dat dit zou moeten werken. De ID moet automatisch worden verhoogd zolang het een primaire sleutel is.
Antwoord 18
Ik heb dit probleem opgelost door elke keer als ik iets aan de database wil toevoegen een nieuw object te maken.
Antwoord 19
In mijn CASE was ik meer tekens aan het invoegen dan gedefinieerd in de tabel.
In Mijn tabel was de kolom gedefinieerd met nvarchar(3)
en ik gaf meer dan 3 tekensdoor en hetzelfde bericht ERROR
kwam eraan.
Het is geen antwoord, maar in sommige gevallen is het probleem vergelijkbaar
Antwoord 20
ik gebruik asp.net core 5.0 en ik krijg die fout. ik krijg die fout omdat ik andere gegevens aan het toevoegen was en de andere methode .SaveChanges()
activeerde, zoals hieronder:
_unitOfWorkVval.RepositoryVariantValue.Create(variantValue);
int request = HttpContext.Response.StatusCode;
if (request == 200)
{
int tryCatch = _unitOfWorkCVar.Complete();
if (tryCatch != 0)
{
productVariant.CategoryVariantID = variantValue.CategoryVariantID;
productVariant.ProductID = variantValue.ProductID;
productVariant.CreatedDate = DateTime.Now;
_unitOfWorkProductVariant.RepositoryProductVariant.Create(productVariant);
_unitOfWorkVval.RepositoryVariantValue.Create(variantValue);
int request2 = HttpContext.Response.StatusCode;
if(request==200)
{
int tryCatch2=_unitOfWorkProductVariant.Complete();//The point where i get that error
}///.......
Antwoord 21
Het probleem dat zich voordeed bij het gebruik van niet-getypte DBContext of DBSet als je Interface gebruikt en de methode voor het opslaan van wijzigingen op een generieke manier implementeert
Als dit uw geval is, stel ik voor om bijvoorbeeld sterk DBContex te typen
MyDBContext.MyEntity.Add(mynewObject)
dan zal .Savechanges
werken
Antwoord 22
Verwijder eenvoudig de tabellen die naar uw .dbml-bestand zijn gesleept en versleep ze opnieuw. Dan Clean solution>Rebuild solution> Oplossing bouwen.
Dat is wat voor mij werkte.
Ik heb de tabel niet zelf gemaakt, ik gebruikte VS en SSMS, ik volgde deze link voor ASP.NET Identity:https://docs.microsoft.com/en-us /aspnet/identity/overview/aan de slag/aspnet-identity-toevoegen aan-een-leeg-of-bestaand-web-formulieren-project