Delen via


Oplossing van functieoverbelasting (Entiteit SQL)

In dit onderwerp wordt beschreven hoe entiteits-SQL-functies worden omgezet.

Er kunnen meer dan één functie met dezelfde naam worden gedefinieerd, zolang de functies unieke handtekeningen hebben.

Wanneer dit het geval is, moeten de volgende criteria worden toegepast om te bepalen naar welke functie wordt verwezen door een bepaalde expressie. Deze criteria worden op volgorde toegepast. Het eerste criterium dat alleen van toepassing is op één functie, is de opgeloste functie.

  1. Parameternummer. De functie heeft hetzelfde aantal parameters dat is opgegeven in de expressie.

  2. Exacte overeenkomst op type. Elk argumenttype van de functie komt exact overeen met het parametertype of is de letterlijke waarde null.

  3. Komt overeen met het subtype. Elk argumenttype van de functie komt exact overeen of is een subtype van het parametertype, of het argument is de letterlijke waarde null. In het geval dat meerdere functies alleen verschillen in het aantal vereiste subtypeconversies, is de functie met het minste aantal subtypeconversies de opgeloste functie.

  4. Overeenkomen met subtype of typepromotie. Elk argumenttype van de functie komt exact overeen, is een subtype of kan worden gepromoveerd naar het parametertype, of het argument is de letterlijke waarde null. In het geval dat meerdere functies alleen verschillen in het aantal subtypeconversies en promoties, is de functie met het minste aantal subtypeconversies en promoties de opgeloste functie.

Als geen van deze criteria resulteert in één functie die wordt geselecteerd, is de aanroepexpressie van de functie niet eenduidig.

Zelfs als één functie kan worden geëxtraheerd met behulp van deze regels, komen de argumenten mogelijk nog steeds niet overeen met de parameters. In dit geval treedt er een fout op.

Voor door de gebruiker gedefinieerde functies heeft de definitie voor een inlinequeryfunctie voorrang, zelfs wanneer er een door het model gedefinieerde functie bestaat met een handtekening die beter overeenkomt met de door de gebruiker gedefinieerde functie.

Zie ook