- Beiträge: 14
identity_insert
- Martin
- Autor
- Offline
- Benutzer
Weniger
Mehr
13 Jahre 10 Monate her #257
von Martin
identity_insert wurde erstellt von Martin
Hallo,
ich versuche, Daten in eine SQL-Datenbank zu schieben. Es ist für mich wichtig, den unique-key selber festzulegen, damit über diesen key Daten einer anderen Tabelle verbinden kann. Beim Import kommt jedoch immer die Fehlermeldung: "Ein expliziter Wert.. kann nicht eingefügt werden, wenn identity_insert auf off steht".
Wenn ich ein script erzeuge und manuell den Befehl "set identity_insert veis_invoice on" voranstelle, dann funktioniert es. Hier das script:
use [test190]
set dateformat 'ymd'
begin tran
set identity_insert veis_invoice on
insert into [VEIS_INVOICE] ([PK_VEIS_INVOICE], [ENTITYDATE], [ENTITYSTATE], [REQNUMBER], [COMPANYID], [PERSONALACCOUNTID], [INV_TYPE], [INVOICETYPE], [AMOUNTBASECURRENCY], [CURRENCYID], [REFERENCENUMBER], [DOCUMENTDATE], [TRANSACTIONDATE], [MODEOFPAYMENT], [FACTORING]) Values(1500171601151820, '2010-12-28 13:02', 0, 15001716, '115', 1151817, 'TTE_CUSTOMERINVOICE', 'ITE_INVOICE', 719.71, 'EUR', '00015001716', '2010-09-08', '2010-09-08', 'PTE_DEFAULT', 'FTE_NO')
commit tran
Kann ich den Befehl auch voranstellen, wenn ich direkt in die Datenbank schreiben?
Gruss
Martin
ich versuche, Daten in eine SQL-Datenbank zu schieben. Es ist für mich wichtig, den unique-key selber festzulegen, damit über diesen key Daten einer anderen Tabelle verbinden kann. Beim Import kommt jedoch immer die Fehlermeldung: "Ein expliziter Wert.. kann nicht eingefügt werden, wenn identity_insert auf off steht".
Wenn ich ein script erzeuge und manuell den Befehl "set identity_insert veis_invoice on" voranstelle, dann funktioniert es. Hier das script:
use [test190]
set dateformat 'ymd'
begin tran
set identity_insert veis_invoice on
insert into [VEIS_INVOICE] ([PK_VEIS_INVOICE], [ENTITYDATE], [ENTITYSTATE], [REQNUMBER], [COMPANYID], [PERSONALACCOUNTID], [INV_TYPE], [INVOICETYPE], [AMOUNTBASECURRENCY], [CURRENCYID], [REFERENCENUMBER], [DOCUMENTDATE], [TRANSACTIONDATE], [MODEOFPAYMENT], [FACTORING]) Values(1500171601151820, '2010-12-28 13:02', 0, 15001716, '115', 1151817, 'TTE_CUSTOMERINVOICE', 'ITE_INVOICE', 719.71, 'EUR', '00015001716', '2010-09-08', '2010-09-08', 'PTE_DEFAULT', 'FTE_NO')
commit tran
Kann ich den Befehl auch voranstellen, wenn ich direkt in die Datenbank schreiben?
Gruss
Martin
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
13 Jahre 10 Monate her - 8 Jahre 10 Monate her #259
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf Aw: identity_insert
Hallo,
das ist eine Interessante Anforderung! Mit der aktuellen Version 1.2.9 funktioniert das leider noch nicht. Ich habe Ihnen aber unter
FlowHeaterBeta.zip
eine leicht modifizierte (BETA) Version bereitgestellt mit der können Sie das zusammen mit folgenden kleinen C# Skript für den .NET Script Heater durchführen.
Anwendung: Ziehen Sie einen .NET Script Heater in eine bestehende Verbindung/Pipe, am besten nehmen Sie dazu gleich das Feld für Auto Increment (Identity), das Sie setzen möchten. Kopieren Sie anschließend oben stehen Skript Code hinein und passen den Tabellennamen an (siehe Kommentar im Skript). Danach müssen Sie noch im Configurator auf der WRITE Seite für das SQL Identity Feld die Eigenschaft "Auto Inkrement" deaktivieren, das wars. Hiermit teilen Sie dem FlowHeater lediglich mit dass das Feld zum SQL Server durchgereicht/gesetzt werden soll, es werden keine Schemaänderungen an der eigentlichen SQL Server Tabelle vorgenommen!
Das Skript führt nun einmalig vor der eigentlichen Ausführung der Insert SQL Statements den SQL Befehl
set identity_insert [IHRE_TABELLE] on
auf der WRITE Seite (= SQL Server Adapter ) aus. Danach können auf der angegeben SQL Server Tabelle auch AutoID (Identity) Werte per Insert eingefügt werden.
Bitte beachten: Das Ganze funktioniert nur zusammen mit dem SQL Server Adapter !
das ist eine Interessante Anforderung! Mit der aktuellen Version 1.2.9 funktioniert das leider noch nicht. Ich habe Ihnen aber unter
FlowHeaterBeta.zip
eine leicht modifizierte (BETA) Version bereitgestellt mit der können Sie das zusammen mit folgenden kleinen C# Skript für den .NET Script Heater durchführen.
Code:
bool bFirst = true;
public object DoWork()
{
// nur beim 1. Aufruf ausführen und nicht im Testmodus
if (!AdapterWrite.OnlyTest && bFirst)
{
bFirst = false;
// SQL Server Tabellennamen anpassen
AdapterWrite.Execute("set identity_insert [IHRE_TABELLE] on");
}
// Eingangsparameter für weitere Verarbeitung wieder zurückliefern
return InValues[0].GetValue();
}
Anwendung: Ziehen Sie einen .NET Script Heater in eine bestehende Verbindung/Pipe, am besten nehmen Sie dazu gleich das Feld für Auto Increment (Identity), das Sie setzen möchten. Kopieren Sie anschließend oben stehen Skript Code hinein und passen den Tabellennamen an (siehe Kommentar im Skript). Danach müssen Sie noch im Configurator auf der WRITE Seite für das SQL Identity Feld die Eigenschaft "Auto Inkrement" deaktivieren, das wars. Hiermit teilen Sie dem FlowHeater lediglich mit dass das Feld zum SQL Server durchgereicht/gesetzt werden soll, es werden keine Schemaänderungen an der eigentlichen SQL Server Tabelle vorgenommen!
Das Skript führt nun einmalig vor der eigentlichen Ausführung der Insert SQL Statements den SQL Befehl
set identity_insert [IHRE_TABELLE] on
auf der WRITE Seite (= SQL Server Adapter ) aus. Danach können auf der angegeben SQL Server Tabelle auch AutoID (Identity) Werte per Insert eingefügt werden.
Bitte beachten: Das Ganze funktioniert nur zusammen mit dem SQL Server Adapter !
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 8 Jahre 10 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Martin
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 14
13 Jahre 10 Monate her #260
von Martin
Super - Vielen Dank - insbesondere für die superschnelle Hilfe!!!! Hat problemlos funktioniert!
Martin antwortete auf Aw: identity_insert
Super - Vielen Dank - insbesondere für die superschnelle Hilfe!!!! Hat problemlos funktioniert!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Sven Heldt
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 1
5 Jahre 4 Monate her #3756
von Sven Heldt
Sven Heldt antwortete auf identity_insert
Hallo,
ich habe Ihren Ratschlag in meine Runtime eingebaut, wie beschrieben. Wenn ich nun die FHRT-Datei als Test oder über BATCH ausführe, bekomme ich die Fehlermeldung
"Auf den Member 'Flowheater.Core.Adapter.BaseAdapter.OnlyTest.get' kann nicht mit einem Instanzverweis zugegriffen werden. Qualifizieren Sie ihn stattdessen mit einem Typnamen.
Die Fehlermeldung bezieht sich auf die Zeile 6 des Scripts, sprich 'if (!AdapterWrite.OnlyTest && bFirst)'
Können Sie mir bitte diesbezüglich weiterhelfen.
Vielen Dank im Voraus.
ich habe Ihren Ratschlag in meine Runtime eingebaut, wie beschrieben. Wenn ich nun die FHRT-Datei als Test oder über BATCH ausführe, bekomme ich die Fehlermeldung
"Auf den Member 'Flowheater.Core.Adapter.BaseAdapter.OnlyTest.get' kann nicht mit einem Instanzverweis zugegriffen werden. Qualifizieren Sie ihn stattdessen mit einem Typnamen.
Die Fehlermeldung bezieht sich auf die Zeile 6 des Scripts, sprich 'if (!AdapterWrite.OnlyTest && bFirst)'
Können Sie mir bitte diesbezüglich weiterhelfen.
Vielen Dank im Voraus.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
5 Jahre 4 Monate her #3757
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
FlowHeater-Team antwortete auf identity_insert
Hallo Herr Heldt,
hier hat es eine (bzw. zwei) Änderungen gegeben, unten finden Sie das korrigiert C# Skript.
Die zweite Änderung ist, dass der IDENTITY_INSERT mit dem SQL Server Adapter nun wesentlich einfacher geht. Sie brauchen nur die Option „Erlaube Auto Inkrement (IDENTITY) Inserts“ auf dem Reiter Allgemein zu aktivieren. Sobald Sie dann am Feld die Option „Auto Increment“ deaktivieren können diese Feldinhalte problemlos importiert werden, siehe Screenshots.
Hier gibt es ein Beispiel dazu: SQL Server Import IDENTITY (Auto Inkrement) Felder
hier hat es eine (bzw. zwei) Änderungen gegeben, unten finden Sie das korrigiert C# Skript.
Die zweite Änderung ist, dass der IDENTITY_INSERT mit dem SQL Server Adapter nun wesentlich einfacher geht. Sie brauchen nur die Option „Erlaube Auto Inkrement (IDENTITY) Inserts“ auf dem Reiter Allgemein zu aktivieren. Sobald Sie dann am Feld die Option „Auto Increment“ deaktivieren können diese Feldinhalte problemlos importiert werden, siehe Screenshots.
Hier gibt es ein Beispiel dazu: SQL Server Import IDENTITY (Auto Inkrement) Felder
Code:
bool bFirst = true;
public object DoWork()
{
// nur beim 1. Aufruf ausführen und nicht im Testmodus
if (!TestMode && bFirst)
{
bFirst = false;
// SQL Server Tabellennamen anpassen
AdapterWrite.Execute("set identity_insert [IHRE_TABELLE] on");
}
// Eingangsparameter für weitere Verarbeitung wieder zurückliefern
return InValues[0].GetValue();
}
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.311 Sekunden