Zum Hauptinhalt springen
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Chart

AutoID MsSQL und abweichender Primary Key

Mehr
10 Jahre 10 Monate her #1577 von Marko
Hallo Forum
In einer Importspezifiaktion verwende ich auf der Write-Seite (Ms Sql 2008 R2) einen anderen Primary Key als die ID der Datenbanktabelle. Damit die Flowheater Definition als Batch ausgeführt werden kann, muss in der Datenbank auf der Write-Seite die letzte ID in der Datenbanktabelle ermittelt werden und dann inkrementiert (+1) werden, wenn ein neuer Datensatz eingefügt wird. Die Verwendung der AutoID erwartet einen Startwert der sonst vor jedem Lauf immer händisch angepasst werden müsste.

Hat jemand dazu ein Skript?

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 10 Monate her - 10 Jahre 10 Monate her #1580 von FlowHeater-Team
FlowHeater-Team antwortete auf AutoID MsSQL und abweichender Primary Key
Hallo Marko,

dazu benötigen so momentan noch den .NET Script Heater und folgendes kleine Skript.
Code:
int lastid = -1; public object DoWork() { if (lastid == -1) { // einmalig den ausgelesene Wert vom SQL Heater holen lastid = (int)Parameter["lastid"].GetInt(); } // bei jedem Satz um eins hochzählen lastid++; // neue ID zurückliefern return lastid; }

Das Skript holt sich einmalig den Parameter „LASTID“ und gibt dann basierend auf diesen Wert bei jedem Datensatz +1 zurück.

Den Parameter müssen Sie über eine SQL Heater beim Start der Definition setzen. Ich habe Ihnen eine kleines Beispiel erstellt (s. Anhang). Hier müssen Sie das Konstrukt mit dem Set Parameter Heater sowie dem Statischen Wert ( X-Value ) durch einen SQL Heater ersetzen. Im SQL Heater tragen sie dann folgenden SELECT ein.

SELECT max(autoid-feld) from Ihre-SQL-Server-Tabelle

Feld und Tabellennamen müssen angepasst werden. Den Wert speichern Sie im Parameter $lastid$

Dateianhang:

Dateiname: dynamische...toid.zip
Dateigröße:2 KB

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: 10 Jahre 10 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 10 Monate her #1583 von Marko
Hallo Robert

Habe das Skript integriert, wie aus den Screenshots ersichtlich. Es kommt jedoch zu folgendem Fehler. Hast Du eine Idee woran es liegen könnte?

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 10 Monate her - 10 Jahre 10 Monate her #1584 von FlowHeater-Team
FlowHeater-Team antwortete auf AutoID MsSQL und abweichender Primary Key
Hallo Marko,

du benötigst folgenden Einstellungen für den SQL Heater. Ausführen bei = „Start“, sowie musst du den Rückgabewert einem Parameter zuweisen. Den Parameternamen den du hier einträgst muss mit dem im .NET Script Heater übereinstimmen, dann sollte es klappen.

lastid = (int)Parameter["LASTID"].GetInt();

Ich denke hier hast du eine Abweichung hast.

Wenn du den Parameter so wie bei Dir über den Set Parameter Heater setzt wird das Skript bei jeder Zeile bzw. Datensatz ausgeführt, das verlangsamt den Import Prozess erheblich.

Wenn es immer noch nicht geht poste bitte mal deine Definition.


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: 10 Jahre 10 Monate her von FlowHeater-Team.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 10 Monate her #1587 von Marko
Hallo Robert. Es lag scheinbar an der Schreibweise der Variablen <LASTID>
Es läuft nun wie gewünscht.

Herzlichen Dank für den allzeit tollen Forumsupport!

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 10 Monate her #1596 von Marko
Hallo Robert. Leider wird bei einem Update des Datensatzes die ID bestehender Datensätze auch über das Skript aktualisiert, da der Primary Key abweichend ist.

Lässt sich das Skript noch erweitern so dass die max(ID) nur bei einem neu eingefügten Datensatz angewendet wird. Im Write-Adapter bei Allgemein ist Insert und Update aktiviert.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 10 Monate her #1599 von FlowHeater-Team
FlowHeater-Team antwortete auf AutoID MsSQL und abweichender Primary Key
Hallo Marko,

versteh ich jetzt nicht ganz. Reicht es nicht aus wenn du die Option „Daten aktualisieren (Update)“ deaktivierst und dafür die Option „vorhandene Datensätze ignorieren“ aktivierst?

Alternativ gäbe es noch zwei weitere Optionen die abhängig von deiner Datenstruktur sind.
  1. Über einen weiteren SQL Heater prüfen ob die ID bereits vorhanden ist. Als SQL kannst du „select count(*) from Deine_SQL_Server_Tabelle“ where ID = $ID$“ Den Parameter $ID$ müsstest du über eine Set Parameter Heater setzen. Den Ausgang lässt du über eine IF-THEN-ELSE Bedingung auf „> größer“ 0 prüfen gibt’s den Ausgang an einen Filter Heater weiter. So werden Datensätze die bereits vorhanden sind vor der Verarbeitung gefiltert.
  2. Du kannst auch den PrimaryKey im FlowHeater auf einen (oder mehr) anders Feld legen. Hiermit änderst du nicht die Tabelle sondern teilst dem FlowHeater lediglich mit anhand welcher Felder geprüft werden soll ob ein Datensatz bereits existiert. Du benötigst hierfür die oben beschrieben Optionen für Update.

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.

Mehr
10 Jahre 9 Monate her #1601 von Marko
Hallo Robert

Wenn ich die Optionen ändere hätte dies zur Folge das ein Update auf bestehende Datensätze nicht mehr durchgeführt wird. Diese soll aber sichergestellt sein, da sich der Status der Datensätze ändert.

In der Tabelle der SQL DB existiert als Primary Key eine LID mit Auto Increment. Diese habe ich im Write Adapter aufgehoben und verwende auf der Write-Seite eine InterneNummer (String) als Primary Key.

Ein zusammengesetzter Primary Key (aus LID und InterneNummer) führt zu falschen Ergebnissen in der Verarbeitung. Wenn ich dieses ausprobiere möchte Flohheater ein Insert auf alle Datensätze durchführen.

Screenshot: Der DS in der ersten Zeile hat aktuell die LID 1275. Wenn ich die Verarbeitung nun ausführe, würde das Skript auch für die zu aktualisierenden Datensätze eine neue LID schreiben. In der ersten Zeile dann die LID 1276. Dieses möchte ich ausgrenzen um eine wöchtenliche automatische Verarbeitung per Batch durchführen zu können. Der Heater AutoID benötigt zwingend einen Startwert welcher für einen Batch so leider nicht verwendet werden kann.

Vielleicht ist in einem weiteren Release eine Heatererweiterung für Auto Increment Werte angedacht, die keinen Eingang haben, um dieses eleganter händeln zu können.

Die Alternative 1 habe ich aus ausprobiert und führte jedoch auch nicht zur gewünschten Verarbeitung. Kannst Du mir ggf. eine Beispieldefinition dazu zur Verfügung stellen?

Vielen Dank
Marko

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
10 Jahre 9 Monate her #1602 von FlowHeater-Team
FlowHeater-Team antwortete auf AutoID MsSQL und abweichender Primary Key
Hallo Marko,

dazu muss zusätzlich geprüft werden ob eine LID bereits vorhanden ist. Ich habe die Definition etwas angepasst. Hier wird über einen weiteren SQL Heater mittels folgenden SQL geprüft ob es eine LID gibt.

select LID from Deine_SQL_Server_Tabelle where LID=$LID$

Der Parameter LID muss dabei über einen SET Parameter Heater gesetzt werden. Wichtig dabei ist die Formatierung. Du musst den Datentyp auf „Integer“ stellen und bei der Formatierung die 1000er Gruppen auf „ohne (Without)“ stellen, sonst wird der SQL nicht richtig formatiert.

Das .NET Skript für die ID liest dann den Wert vom SQL Heater aus und zählt nur hoch wenn es noch keinen Datensatz gibt. Ist bereits eine LID vorhanden wird dieser Wert zurückgegeben.




Dateianhang:

Dateiname: dynamische...id-2.zip
Dateigröße:3 KB

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.323 Sekunden
FlowHeater Logo

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.