New SQL Where for Breadcrumb
Zuletzt geändert: 14.03.2026 05:56

New-SqlWhereForBreadcrumb #

ÜBERSICHT #

Erzeugt eine SQL-WHERE-Bedingung aus drei Breadcrumb-Listen (UND, ODER, NICHT) für den EULANDA-Merkmalbaum.

SYNTAX #

New-SqlWhereForBreadcrumb [-TableName] <string> [[-AndPathList] <string[]>] [[-OrPathList]
    <string[]>] [[-NotPathList] <string[]>] [-Conn] <__ComObject> [[-IdExpression] <string>]
    [[-SchemaName] <string>] [[-DatabaseName] <string>] [-Pretty] [-IgnoreMissingPath]
    [[-TableAlias] <string>] [<CommonParameters>]

BESCHREIBUNG #

Die Funktion nimmt drei Listen mit Breadcrumb-Pfaden (UND / ODER / NICHT) und löst diese gegen den EULANDA-Merkmalbaum auf.

Pro Breadcrumb-Pfad wird der zugehörige Merkmalknoten ermittelt. Danach werden alle untergeordneten Endknoten (MerkmalTyp 1 und 2) eingesammelt. Für diese Endknoten gilt:

  • Wenn SqlBedingung gefüllt ist, wird diese Bedingung direkt als SQL-Prädikat verwendet.
  • Sonst wird ein Merkmalelement-Prädikat erzeugt: IN (SELECT ObjektID FROM WHERE KopfID IN (…))

Aus den Prädikaten wird die Logik aufgebaut:

  • UND: alle Prädikate müssen zutreffen
  • ODER: mindestens eins der Prädikate muss zutreffen
  • NICHT: keines der Prädikate darf zutreffen (NOT ( … OR … ))

PARAMETER #

-TableName #

Type: string

Tabellenname im EULANDA-Merkmalbaum, z.B. ‘Adresse’, ‘Artikel’, ‘Rechnung’.

-AndPathList #

Type: string[]
Default: @()

Liste von Breadcrumb-Pfaden, die als UND verknüpft werden.

-OrPathList #

Type: string[]
Default: @()

Liste von Breadcrumb-Pfaden, die als ODER-Gruppe verknüpft werden.

-NotPathList #

Type: string[]
Default: @()

Liste von Breadcrumb-Pfaden, die als NICHT-Gruppe verknüpft werden.

-Conn #

Type: __ComObject

Offene ADODB-Verbindung zur EULANDA-Datenbank.

-IdExpression #

Type: string
Default: 'id'

SQL-Ausdruck für das Objekt-ID-Feld im Kontext der späteren Abfrage. Default ist ‘id’, aber auch mit Prefix wie ‘a.Id’ wäre möglich.

-SchemaName #

Type: string
Default: 'dbo'

Schema für Merkmal- und Merkmalelement-Tabelle. Default ‘dbo’.

-DatabaseName #

Type: string
Default: ''

Optionaler Datenbankname für die Qualifizierung der Tabellen. Wenn leer, wird versucht den Katalognamen aus der ADO-ConnectionString zu lesen. Wenn das nicht klappt, wird ohne Datenbankpräfix gearbeitet.

-Pretty #

Type: switch

Formatiert die Ausgabe mit Zeilenumbrüchen und Einrückung.

-IgnoreMissingPath #

Type: switch

Wenn gesetzt, werden nicht auflösbare Pfade still übersprungen (sonst Throw).

AUSGABEN #

string

SQL-WHERE-Bedingung (ohne führendes WHERE).

BEISPIELE #

# Gleiche Logik, aber mit Alias in deiner späteren Abfrage
$where = New-SqlWhereForBreadcrumb -TableName 'Adresse' -AndPathList '\ADRESSEN\A' -Conn $conn -IdExpression 'a.Id'
# Erstellt eine SQL-WHERE-Klausel aus Breadcrumb-Pfaden mit AND-, OR- und NOT-Logik
$udl = 'C:\Config\Database.udl'
$conn = Get-ConnByUdl -Udl $udl

$andPathList = @(
  '\Products\Active'
)

$orPathList = @(
  '\Products\New',
  '\Products\Extensions\Deprecated'
)

$notPathList = @(
  '\Products\Legacy'
)

$where = New-SqlWhereForBreadcrumb `
  -TableName 'Address' `
  -AndPathList $andPathList `
  -OrPathList  $orPathList `
  -NotPathList $notPathList `
  -Conn $conn `
  -IdExpression 'Id' `
  -Pretty

$sql = "SELECT * FROM Address WHERE $where"

HINWEISE #

Der Merkmalbaum ist hierarchisch aufgebaut. Jeder Merkmalknoten besitzt einen eindeutigen Pfad (Breadcrumb), der seine Position im Baum beschreibt und zur eindeutigen Adressierung verwendet wird.