![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: dbx
Select where wert in (...)
Hallo,
ich habe grad erfolglos über folgendes Problem gegrübelt und gesucht: Ich möchte ein SQL-Statement der Form "Select * from table where spalte in (1,2,3,4)". Diese Bedingung (1,2,3,4) möchte ich allerdings als dynamischen Parameter haben, also quasi "Select * from table where spalte in (:menge)" Klar kann ich mir den SQL-String selbst zusammenbauen, ich möchte aber wissen, ob es auch eine Syntax gibt um zu sagen: Query.Parambyname('menge').AsIrgendwas=Menge. Gruß Rainer |
AW: Select where wert in (...)
Nein, geht nur durch dynamischen Zusammenbau (z:b. als Codeblock oder SP)
|
AW: Select where wert in (...)
Hi,
So was könnte man z.B. mit einer SP machen.
SQL-Code:
create or alter procedure SP_DECODE_LIST ( ALIST DOM_MEMO, ADELIMITER DOM_CHAR1) returns ( ITEM DOM_VCHAR100) AS DECLARE VARIABLE I INTEGER; begin IF (ADelimiter is NULL) THEN ADelimiter = ','; ALIST = COALESCE(ALIST, ''); ITEM = NULL; IF (CHAR_LENGTH(ALIST) > 0) THEN BEGIN WHILE (CHAR_LENGTH(ALIST) > 0) DO BEGIN I = POSITION(ADELIMITER IN ALIST); IF (I = 0) THEN I = CHAR_LENGTH(ALIST) +1; ITEM = F_TRIM(LEFT(ALIST, I-1)); suspend; ALIST = SUBSTRING(ALIST FROM I + 1 FOR CHAR_LENGTH(ALIST)); END END ELSE suspend; -- einmal NULL end die Query würde dann so aussehen
SQL-Code:
select L.ITEM, R.* from SP_DECODE_LIST(:Menge, ',') L join MyTable R on (R.ID = L.ITEM) und im Delphi übergibst du die Liste dem Parameter als Commatext
Delphi-Quellcode:
MeineQuery.ParamByName('Menge').AsString := '222,223,224,225,226,227'; ps. Vor dem Erstellen der SP müssen die Domains "DOM_MEMO" als Blob Typ 1 und "DOM_CHAR1 und "DOM_VCHAR100" wie der Name schon sagt definiert werden. Oder halt direkt den Typ angeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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