- Beiträge: 14
Instert in sql-Datenbank mit Löschen
- Martin
- Autor
- Offline
- Benutzer
Weniger
Mehr
13 Jahre 6 Monate her #390
von Martin
Instert in sql-Datenbank mit Löschen wurde erstellt von Martin
Hallo, ich habe folgendes Problem. Softwarestand 1.32:
Ich lade Daten in eine Tabelle 1. Anschließend werden die Daten über eine "group by" Funktion zusammengefasst und in eine andere Tabelle 2 geschoben.
Nächster Lauf: Daten in Tabelle 1, "Tabelle vor dem Import leeren" usw.
Das Ganze mache ich 4x über den batch-Lauf.
So weit so gut.
Sind jedoch bei einem Lauf keine Daten vorhanden, also keine Daten in Tabelle 1 zu laden, dann werden die Daten auch nicht vorher gelöscht. Zusammengefasste Daten werden dann doppelt in die Tabelle 2 gestellt.
Gibt es hierfür einen bypass?
Ich lade Daten in eine Tabelle 1. Anschließend werden die Daten über eine "group by" Funktion zusammengefasst und in eine andere Tabelle 2 geschoben.
Nächster Lauf: Daten in Tabelle 1, "Tabelle vor dem Import leeren" usw.
Das Ganze mache ich 4x über den batch-Lauf.
So weit so gut.
Sind jedoch bei einem Lauf keine Daten vorhanden, also keine Daten in Tabelle 1 zu laden, dann werden die Daten auch nicht vorher gelöscht. Zusammengefasste Daten werden dann doppelt in die Tabelle 2 gestellt.
Gibt es hierfür einen bypass?
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
13 Jahre 6 Monate her #392
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: Instert in sql-Datenbank mit Löschen
Sie können die Tabelle über eine zusätzliche Dummy Definition löschen.
Schauen Sie sich hierzu folgenden Forumsbeitrag an.
Ursprungstabelle leeren
Hier ist zwar beschrieben wie die Ursprungstabelle nach dem Import geleert werden kann, das gleich Vorgehen kann aber auch vor dem eigentlichen Import angewendet werden, so dass Ihre Tabelle vor dem Import immer sauber geleert ist.
In Ihrem Batch CMD Skript geben Sie dann folgendes an
Schauen Sie sich hierzu folgenden Forumsbeitrag an.
Ursprungstabelle leeren
Hier ist zwar beschrieben wie die Ursprungstabelle nach dem Import geleert werden kann, das gleich Vorgehen kann aber auch vor dem eigentlichen Import angewendet werden, so dass Ihre Tabelle vor dem Import immer sauber geleert ist.
In Ihrem Batch CMD Skript geben Sie dann folgendes an
Code:
@echo off
… vorherige Anweisungen
FHBatch.exe Import-Tabelle-Leeren.fhd
FHBatch.exe Daten-Import.fhd
… weitere Anweisungen
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.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Martin
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 14
13 Jahre 6 Monate her #393
von Martin
Martin antwortete auf Aw: Instert in sql-Datenbank mit Löschen
Hallo,
danke für die Antwort. Meines Erachtens wäre das ein Fehlverhalten der Anwendung. Ich kann das Problem aber auch so lösen.
Noch eine Frage hierzu: Ich arbeite in Tabellen mit einer "foreign key Einschränkung". Es gibt eine Tabelle 1, in der ein Kopfsatz steht, und eine Tabelle 2 in der sich Datensätze in der Tabelle 1 auf den jeweiligen Kopfsatz beziehen. Die Datensätze der Tabelle 2 kann ich so löschen. Wenn ich dann aber die Datenätze der Tabelle 1 löschen will (mit der oben beschriebenen fhd-Datei), dann kommt die Fehlermeldung: "Die Tabelle 1 kann nicht abgeschnitten werden, da eine Foreign Key-Einschränkung auf sie verweist". Direkt auf der MS-SQL Datenbank kann ich die Datensätze jedoch löschen.
Können Sie da weiterhelfen?
Vielen Dank!
danke für die Antwort. Meines Erachtens wäre das ein Fehlverhalten der Anwendung. Ich kann das Problem aber auch so lösen.
Noch eine Frage hierzu: Ich arbeite in Tabellen mit einer "foreign key Einschränkung". Es gibt eine Tabelle 1, in der ein Kopfsatz steht, und eine Tabelle 2 in der sich Datensätze in der Tabelle 1 auf den jeweiligen Kopfsatz beziehen. Die Datensätze der Tabelle 2 kann ich so löschen. Wenn ich dann aber die Datenätze der Tabelle 1 löschen will (mit der oben beschriebenen fhd-Datei), dann kommt die Fehlermeldung: "Die Tabelle 1 kann nicht abgeschnitten werden, da eine Foreign Key-Einschränkung auf sie verweist". Direkt auf der MS-SQL Datenbank kann ich die Datensätze jedoch löschen.
Können Sie da weiterhelfen?
Vielen Dank!
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
13 Jahre 6 Monate her #394
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: Instert in sql-Datenbank mit Löschen
Als Fehler würde ich das nicht ansehen, das ist by Design so vorgesehen. Das Problem ist dass wenn auf der WRITE Seite keine Daten ankommen auch nichts weiter durchgeführt wird u.a. wird auch die Tabelle nicht geleert. Ich werde die Verarbeitungsweise in dieser Hinsicht mal überdenken und ggf. ändern.
Zu Ihrer 2. Frage) Das ist ein Problem der Version 1.x Hier werden Tabellen aus Performance Gründen nicht mit dem SQL Befehl "delete from Ihre_Tabelle" geleert sondern mit "truncate Ihre_Tabelle" abgeschnitten.
In Version 2.x wurde das Umgestellt, so dass hier wieder delete verwendete wird. Über die Adapter Eigenschaft "UseTruncate = true" kann das auch wieder auf TRUNCATE umgestellt werden.
Workaround für Version 1.x: Ziehen Sie einen .NET Script Heater in irgendeine bestehende Verbindung und Kopieren folgenden Code hinein.
Passen Sie im Skript den Tabellennamen an, so dass Ihre gewünschte Tabelle geleert wird. Danach müssen Sie noch auf der WRITE Seite die Option "Tabelle vor dem Import Leeren" wieder deaktivieren.
Zu Ihrer 2. Frage) Das ist ein Problem der Version 1.x Hier werden Tabellen aus Performance Gründen nicht mit dem SQL Befehl "delete from Ihre_Tabelle" geleert sondern mit "truncate Ihre_Tabelle" abgeschnitten.
In Version 2.x wurde das Umgestellt, so dass hier wieder delete verwendete wird. Über die Adapter Eigenschaft "UseTruncate = true" kann das auch wieder auf TRUNCATE umgestellt werden.
Workaround für Version 1.x: Ziehen Sie einen .NET Script Heater in irgendeine bestehende Verbindung und Kopieren folgenden Code hinein.
Code:
public object DoWork()
{
// nicht im Testmodus ausführen
if (AdapterWrite.OnlyTest == false)
AdapterWrite.Execute("delete from IhreTabelle_BITTE_Anpassen");
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.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.263 Sekunden