![]() |
Datenbank: MsSQL • Version: 2008 • Zugriff über: UniDac
MsSQL Abfrage per ParamValues aber als List (IN)
Hallo zusammen,
ich versuche seit einiger Zeit eine Abfrage dahingehend zu optimieren, dass ich eine Liste per IN - Statement abfrage. Das SQL im Query sieht wie folgt aus:
Code:
Es funktioniert, wenn ich ParamValues so befülle
SELECT ID, Login, Name
FROM User WHERE (ServOrt in (:ServOrt))
Delphi-Quellcode:
dbquUser_Lu.Params.ParamValues['ServOrt'] := 'F';
Verschiedene Versuche, eine Liste einzugeben, haben aber nicht funktioniert, z.B.
Delphi-Quellcode:
Weiß jemand wies geht?
dbquUser_Lu.Params.ParamValues['ServOrt'] := 'F, U';
dbquUser_Lu.Params.ParamValues['ServOrt'] := VarArrayOf(['F', 'U']); Danke und Grüße Gerd |
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Hatte das Problem auch mal, aber mit AnyDAC, wobei es keine lösung dafür gab.
|
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Selber basteln, anders gehts nicht.
Delphi-Quellcode:
Const
Query = 'SELECT ID, Login, Name FROM User WHERE (ServOrt in (%s))'; Begin MyQuery.SQL.Text := Format(Query,[ServOrt]); ... |
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Schau dir mal in der Hilfe zu den UniDAC die Verwendung von Macros an. Die kannst du zur Laufzeit setzen, ähnlich wie der vorgeschlagene Formatstring. Mit einem gravierenden Unterschied: hier wird das gesamte Argument gesetzt und das kann dann auch ein Leerstring oder NULL sein.
Ich würde wie folgt vorgehen: zunächst würde ich die Where-Klause grundsätzlich mit dem Argument 1=1 setzen. Erstens wird dann auf jeden Fall der Optimizer aufgerufen, zweitens spare ich mir den Test, ob eine Where-Klausel existiert. Die Query würde dann um das Macro &Liste erweitert:
Delphi-Quellcode:
In der Query trägst du auf dem Reiter Macro unter &Liste einen Dummy ein:
SELECT
ID, Login, Name FROM User WHERE 1 = 1 &Liste
Delphi-Quellcode:
In deinem Quelttext überschreibst du dann das Macro:
and 1 = 1
Delphi-Quellcode:
.
Query.MacroByName('Liste').Value := 'and ServOrt in ('F', 'U')
Grüße Mikhal |
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Zitat:
Zitat:
Zitat:
|
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Zumindestens bei Oracle ist/war es so, dass der Abfrage-Optimizer der Datenbank ohne Where-Klausel nicht aufgerufen wird. Ich habe es mir daher zur Gewohnheit gemacht, immer mindestens Where 1 = 1 in der Where-Klausel einzusetzen ohne Rücksicht auf die Datenbank).
Grüße Mikhal |
AW: MsSQL Abfrage per ParamValues aber als List (IN)
OK, Danke für die schnelle Info
|
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Beim selbst basteln aber unbedingt auf SQL Injection aufpassen ;)
|
AW: MsSQL Abfrage per ParamValues aber als List (IN)
Habe es jetzt über das Macro gelöst da das den Parametern recht nahe kommt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 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 by Thomas Breitkreuz