Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: AutoID MsSQL und abweichender Primary Key

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1577

  • Marko
  • Markos Avatar
  • Offline
  • Senior Member
  • Beiträge: 70
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?
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1580

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
Hallo Marko,

dazu benötigen so momentan noch den .NET Script Heater und folgendes kleine Skript.
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: 2 Jahre 10 Monate her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1583

  • Marko
  • Markos Avatar
  • Offline
  • Senior Member
  • Beiträge: 70
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?
Anhang:
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1584

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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: 2 Jahre 10 Monate her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1587

  • Marko
  • Markos Avatar
  • Offline
  • Senior Member
  • Beiträge: 70
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!
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1596

  • Marko
  • Markos Avatar
  • Offline
  • Senior Member
  • Beiträge: 70
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1599

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1601

  • Marko
  • Markos Avatar
  • Offline
  • Senior Member
  • Beiträge: 70
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

AutoID MsSQL und abweichender Primary Key 2 Jahre 10 Monate her #1602

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1099
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.096 Sekunden