Invoke Eul Upsert
Zuletzt geändert: 23.05.2026 10:43

Übersicht

Invoke-EulUpsert #

ÜBERSICHT #

Fügt eine Zeile in eine EULANDA-Tabelle ein oder aktualisiert sie – erkannt am Schlüssel.

SYNTAX #

Invoke-EulUpsert [-Conn] <__ComObject> [-Table] <string> [-KeyColumns] <string[]> [-Mode] <string>
    [[-Schema] <PSCustomObject[]>]

BESCHREIBUNG #

Generisches Upsert für Plugin-Skripte (Excel-Import, Massendaten-Pflege, Schnittstellen). Bestimmt anhand der angegebenen Schlüssel-Spalten, ob der Datensatz bereits existiert:

  • Nicht vorhanden → INSERT
  • Genau eine Treffer-Zeile → UPDATE
  • Mehrere Treffer → Fehler (Schlüssel ist nicht eindeutig)

Identity-Spalten und berechnete Spalten (Computed Columns) werden automatisch erkannt (Get-EulTableSchema) und weder in INSERT-VALUES noch in UPDATE-SET aufgenommen. Schlüssel-Spalten werden beim UPDATE nicht überschrieben (sie stehen in der WHERE-Klausel). Spalten, die nicht in -Row enthalten sind, bleiben beim UPDATE unangetastet und werden beim INSERT auf den SQL-Default gesetzt.

Werte-Formatierung:

  • $null und [DBNull]NULL
  • bool1 / 0
  • DateTime'yyyy-MM-dd HH:mm:ss'
  • Zahlen (int, double, decimal) → Invariant-Culture (Punkt als Dezimaltrenner)
  • Strings → ’ verdoppelt, in Hochkommata

PARAMETER #

-Conn #

Type: __ComObject

Offene ADODB-Verbindung. Caller-owns-Connection, wird NICHT geschlossen.

-Table #

Type: string

Tabellenname (z.B. ‘Artikel’, ‘Adresse’).

-KeyColumns #

Type: string[]

Eine oder mehrere Spalten, die zusammen den fachlichen Schlüssel bilden. Beispiel 'ArtNummer' oder @('AdresseId','ArtNummer').

-Row #

Hashtable oder PSCustomObject mit den Spalten/Werten des Datensatzes. Schlüssel-Spalten MÜSSEN enthalten sein. Identity- und Computed- Spalten werden still ignoriert, falls vorhanden.

-Mode #

Type: string
Default: 'Upsert'

Upsert (Default) – INSERT oder UPDATE je nach Existenz. InsertOnly – nur INSERT, wirft Fehler wenn Datensatz schon existiert. UpdateOnly – nur UPDATE, liefert Action=Skipped wenn Datensatz fehlt.

-Schema #

Type: PSCustomObject[]

Optional: vorab geladenes Schema (Get-EulTableSchema). Spart bei Schleifen über viele Zeilen einen Roundtrip pro Aufruf.

AUSGABEN #

[PSCustomObject] mit:

Action (string) ‘Inserted’ | ‘Updated’ | ‘Skipped’ Id (object) Identity-Wert der eingefügten/aktualisierten Zeile (bei Identity-Tabellen), sonst $null RowsAffected (int) Anzahl betroffener Zeilen aus dem SQL-Befehl

BEISPIELE #

# Artikel anlegen oder aktualisieren
Invoke-EulUpsert -Conn $conn -Table 'Artikel' `
  -KeyColumns 'ArtNummer' `
  -Row @{ ArtNummer='X1'; Kurztext1='Neuer Artikel'; Vk=12.5 }
# Mit vorab geladenem Schema in einer Schleife
$schema = Get-EulTableSchema -Conn $conn -Table 'Artikel'
foreach ($row in $rows) {
  Invoke-EulUpsert -Conn $conn -Table 'Artikel' `
    -KeyColumns 'ArtNummer' -Row $row -Schema $schema
}
# Nur Update – kein Anlegen bei Tippfehler in der Excel-Datei
Invoke-EulUpsert -Conn $conn -Table 'Adresse' `
  -KeyColumns 'Match' `
  -Row @{ Match='MUSTERMANN'; Name1='Mustermann GmbH' } `
  -Mode UpdateOnly

HINWEISE #

Phase 4 Tier 1 – DB-Baustein für die Excel-Pipeline und andere Massenpflege-Skripte. Kein parameterisiertes SQL: Plugin-Autor ist für vertrauenswürdige Eingaben verantwortlich (keine End-User-SQL).