![]() |
SQLCmd Manipulation
Hallo ich suche eine library oder co, mit der ich einfach und leicht SQL commands bearbeiten kann.
Im aktuellen Fall habe ich eine SQL Command und muss dort neue WHERE Klauseln dynamisch hinzufügen ... aber das ist ledier gar nicht so leicht ;)
Code:
nun will dynamisch eine neue WHERE Klausel einfügen in diesem Fall 2 mal in jedem Union zweig
SELECT A.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = A.X)
, A.TEST FROM TABA A WHERE A.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = A.Y) AND A.DELETED = 0 UNION SELECT D.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = D.X) , D.TEST FROM TABD D WHERE D.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = D.Y) AND D.DELETED = 0
Code:
kennt wer eine Library für soetwas?
SELECT A.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = A.X)
, A.TEST FROM TABA A WHERE (---NEUE WHERE ---) AND (A.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = A.Y) AND A.DELETED = 0) UNION SELECT D.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = D.X) , D.TEST FROM TABD D WHERE (---NEUE WHERE ---) AND (D.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = D.Y) AND D.DELETED = 0) |
AW: SQLCmd Manipulation
Suchst du vielleicht einen
![]() |
AW: SQLCmd Manipulation
ja sowas ähnliches nur halt was auch gleich eine Manipulation ermöglicht ...
|
AW: SQLCmd Manipulation
Ganz simpel und einfach?
![]()
SQL-Code:
SELECT A.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = A.X)
, A.TEST FROM TABA A WHERE (%WHEREADD%) AND (A.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = A.Y) AND A.DELETED = 0) UNION SELECT D.ID, (SELECT FIRST 1 B.ID FROM TABB B WHERE B.X = D.X) , D.TEST FROM TABD D WHERE (%WHEREADD%) AND (D.ID IN (SELECT C.ID FROM TABC C WHERE C.Y = D.Y) AND D.DELETED = 0)
Delphi-Quellcode:
function ModifyWhereAdd(const SqlCmd, WhereAdd : string) : string;
var LReplacePattern : string; begin if ( WhereAdd = '' ) then LReplacePattern := '1=1' else LReplacePattern := WhereAdd; Result := StringReplace( SqlCmd, '(%WHEREADD%)', '( ' + LReplacePattern + ' )', [ rfReplaceAll, rfIgnoreCase ] ); end; |
AW: SQLCmd Manipulation
jein
es kann sein das ich zufällig gar keinen Filter hinzufügen will, oder das es aber 4 filter werden die dynamisch hinzugefügt werden sollen, dann versagt das einfache simple StringReplace Und das größte Problem ist, das ich diese SQL Commands nicht so umändern kann, da die aus einem bestehenden System kommen ... |
AW: SQLCmd Manipulation
Wieso sollte das versagen?
Wenn kein Filter, dann mit "(1=1)" ersetzen. Wenn du dynamisch mehrere Bedingungen haben möchtest, dann definiere dir eine Klasse, die diese Bedingungen entgegennehmen kann und dann für die Ersetzung zusammenbaut und per StringReplace dort einsetzt. |
AW: SQLCmd Manipulation
Zitat:
mein Hauptproblem ist aber das ich dieses (%WHEREADD%) wiederum dynamisch in die SQL Commands reinbringen müsste, da ich ja bestehende SQL Command bekomme die ich verarbeiten muss ... und dann bin ich ja wieder im selben dilemma .... |
AW: SQLCmd Manipulation
Ok, aber von der Beschreibung her macht dieser
![]() doch einen guten Eindruck |
AW: SQLCmd Manipulation
Also ohne Parser oder die Verwendung von Pattern im Basis SQL hast Du da schlechte Karten.
Vielleicht hab ich das falsch im Kopf, aber irgendjemand hat hier neulich nach Aufbau von Union Views gefragt, warst Du das? Annahme: So oder so, es ist der Erste Union View im Projekt, sonst würdest Du hier nicht mit der Frage aufschlagen. Vorschlag: Baue das Union SQL in einen View ein. Alle minimalen Where Bedinungen von Anfang an aufnehmen, alle Felder, die ggF. gefiltert werden mit ins SQL Select rein. Im Ergebnis hast Du wieder nur eine Where Clause. Haken an der Sache dürfte ggF. die Performance sein, da alle möglichen Felder für Where Kriterien mit geschleift werden müssen und natürlich immer über alles "gefiltert" wird. |
AW: SQLCmd Manipulation
Ich kann Deine Einwände nicht so ganz nach vollziehen.
Du hast einen AbfrageText vorgegeben
Code:
Daraus machs Du
Select irgendwas
from irgendwo where irgendeinebedingung
Code:
and irgendwasneues wir durch Deine zusätzlichen Bedingungen ersetzt
Select irgendwas
from irgendwo where 1=1 and irgendeinebedingung and irgendwasneues Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz