ER-funktionen VALUEIN
Funktionen VALUEIN
afgør, hvorvidt det angivne input svarer til en værdi for et angivet element på den angivne liste. Den returnerer en Boolesk værdi som værende SANDT, hvis det angivne input svarer til resultatet af kørslen med det angivne udtryk for mindst én post på den angivne liste. Ellers returneres en Boolesk værdi på FALSK.
Syntaks
VALUEIN (input, list, list item expression)
Argumenter
input
: Felt
Den gyldige sti til et element i en datakilde af typen Postliste. Værdien af dette element bliver sammenlignet.
list
: Liste over poster
Den gyldige sti til en datakilde af datatypen Postliste.
list item expression
: Boolesk
Et gyldigt betinget udtryk, der enten peger på eller indeholder et enkelt felt fra den angivne liste, som skal bruges til sammenligningen.
Returnerede værdier
Boolesk
Den resulterende Booleske værdi.
Bemærkninger til brug
Generelt set oversættes funktionen VALUEIN
til et sæt ELLER-betingelser. Hvis listen over ELLER-betingelserne er stor, og den maksimale samlede længde af en SQL-sætning muligvis overskrides, skal du overveje at bruge VALUEINLARGE
som funktion.
(input = list.item1.value) OR (input = list.item2.value) OR …
I nogle tilfælde kan den oversættes til en SQL-database-sætning ved hjælp af operatøren EXISTS JOIN
.
Bemærk!
Den værdi, som funktionen VALUEIN
returnerer, bruges forskelligt afhængigt af, om denne funktion bruges til at angive udvælgelseskriterier for funktionen FILTER
eller funktionen WHERE
.
Eksempel 1
Du kan i din modeltilknytning definere datakilden Liste af typen Beregnet felt. Denne datakilde indeholder udtrykket SPLIT ("a,b,c", ",")
.
Når en datakilde kaldes, og hvis den er konfigureret som udtrykket VALUEIN ("B", List, List.Value)
, returneres SANDT. I dette tilfælde oversættes funktionen VALUEIN
til følgende sæt betingelser: (("B" = "a") or ("B" = "b") or ("B" = "c"))
, når ("B" = "b")
er SAND.
Når en datakilde kaldes, og hvis den er konfigureret som udtrykket VALUEIN ("B", List, LEFT(List.Value, 0))
, returneres FALSK. I dette tilfælde oversættes funktionen VALUEIN
til følgende betingelse: ("B" = "")
, som ikke er lig med SAND.
Den øvre grænse for antallet af tegn i teksten i en sådan betingelse er 32.768 tegn. Du skal derfor ikke oprette datakilder, der kan overskride denne grænse på kørselstidspunktet. Hvis grænsen overskrides, stopper programmet med at køre, og der udløses en undtagelse. For eksempel kan denne situation opstå, hvis datakilden er konfigureret som WHERE (List1, VALUEIN (List1.ID, List2, List2.ID)
, og listerne Liste1 samt Liste2 indeholder en stor mængde poster.
I nogle tilfælde kan funktionen VALUEIN
oversættes til en databasesætning ved hjælp af operatøren EXISTS JOIN
. Dette problem opstår, når funktionen FILTER
anvendes, og følgende betingelser er opfyldt:
- Indstillingen Spørg efter forespørgsel er deaktiveret for datakilden til funktionen
VALUEIN
, der refererer til listen over poster. Der bliver ikke anvendt yderligere betingelser på denne datakilde på kørselstidspunktet. - Ingen indlejrede udtryk konfigureres for datakilden til den
VALUEIN
-funktion, der refererer til listen over poster. - Et listeelement i
VALUEIN
-funktionen refererer til et felt i den angivne datakilde og ikke til et udtryk eller en metode i den angivne datakilde.
Overvej at bruge denne indstilling i stedet for funktionen WHERE
, som er beskrevet tidligere i dette eksempel.
Eksempel 2
Du definerer følgende datakilder i din modeltilknytning:
- Datakilden In for typen Tabelpost. Denne datakilde refererer til Intrastat-tabellen.
- Datakilden Port for typen Tabelpost. Denne datakilde refererer til IntrastatPort-tabellen.
Når en datakilde bliver kaldt, der konfigureret som udtrykket FILTER (In, VALUEIN(In.Port, Port, Port.PortId)
, genereres følgende SQL-sætning for at returnere filtrerede poster fra tabellen Intrastat.
select … from Intrastat
exists join TableId from IntrastatPort
where IntrastatPort.PortId = Intrastat.Port
For felterne dataAreaId genereres den endelige SQL-sætning ved hjælp af IN
-operatoren.
Eksempel 3
Du definerer følgende datakilder i din modeltilknytning:
- Datakilden Le for typen Beregnet felt. Denne datakilde indeholder udtrykket
SPLIT ("DEMF,GBSI,USMF", ",")
. - Datakilden In for typen Tabelpost. Denne datakilde refererer til Intrastat-tabellen, og indstillingen På tværs af virksomheden er aktiveret for den.
Når en datakilde, der er blevet konfigureret som udtrykket FILTER (In, VALUEIN (In.dataAreaId, Le, Le.Value)
, kaldes, indeholder den endelige SQL-sætning følgende betingelse.
Intrastat.dataAreaId IN ('DEMF', 'GBSI', 'USMF')