TSQL - If..Else verklaring binnen Tabel-Gewaardeerde functies - kan niet doorgaan | a-shops-ranking.com
Vraag TSQL - If..Else verklaring binnen Tabel-Gewaardeerde functies - kan niet doorgaan
Alvorens te posten heb ik enkele artikelen gelezen over het ontwikkelen van USD-functies, maar ik heb geen oplossingen voor mijn probleem gevonden ... wat als volgt is:
Ik heb een heel eenvoudige database, die basketbalspelers opslaat en bestaat uit de kolom ID, Age, Height en Name. Wat ik zou willen doen is het implementeren van een functie 'hoogte' met één parameter @set varchar (10), die afhankelijk van een @set-waarde verschillende selectiestatussen activeert
wat ik probeerde te implementeren was in psuedo-code:
Kan iemand me een hint geven hoe ik het moet implementeren?
De eenvoudigste vorm is altijd de beste
Dit formulier wordt de INLINE-tabelfunctie genoemd, wat betekent dat SQL Server het gratis kan uitbreiden om de speler rechtstreeks met andere tabellen in de rij van een grotere query samen te voegen, waardoor het presteert oneindig1 beter dan een tafelwaardetabel met meerdere afschriften.
Je hebt hier misschien de voorkeur aan, zodat je reeksen compleet zijn (je hebt een opening tussen 175 en 180)
SQL Server zorgt voor kortsluiting van de takken wanneer de variabele @set wordt geparseerd.
1 overdrijving, maar slechts in geringe mate
Je was dichtbij. Voor het gebruik van een tabelwaardetabel met meerdere afschriften moet de retourtabel worden opgegeven en ingevuld in de functie:
Ik zou aanraden om een ​​inline TVF te gebruiken, zoals Richard's antwoord laat zien. Het kan de tabelterugloop uit uw verklaring afleiden.
Merk ook op dat een multi-statement en inline TVF's echt heel anders zijn. Een inline TVF is minder een black-box voor de optimizer en meer een geparametriseerde weergave in termen van de optimalisator die in staat is om dingen te herschikken met andere tabellen en weergaven in hetzelfde uitvoeringsplan.
Waarom codeer je dit, maak een hoogtetabel en pak vervolgens alle hoogtes die geldig zijn voor het bereik
Ik zal de <case voor je plezier achterlaten.
We kunnen de tabelwaarde-functie op de volgende manier gebruiken met IF-voorwaarden erop.
Volgens Itzik Ben-Gan in zijn boek "TSQL Querying" (Itzik Ben-Gan et al, (c) 2015 Microsoft Press, ISBN 978-0-7356-8504-8, P. 215) "...Ik vind inline TVF's een geweldig hulpmiddel, waardoor de logica en herbruikbaarheid kunnen worden ingekapseld zonder dat er problemen met de prestaties van UDF ..."
Hij zegt ook dat als je dat nodig hebt "... een herbruikbare tabelexpressie zoals een weergave, maar u moet ook invoerparameters doorgeven aan de tabelexpressie ... TSQL biedt in line table-valued functions (TVFs). "
Dit type 'IF' ( inline-functie - een ander type in sys.objects ) gebruikt de uitvoerspecificatie 'RETOURTAFEL' en schijnbaar kan deze geen BEGIN / END bevatten. De syntaxis en rechten zijn erg beperkend, maar we zien een goede optimalisatie en prestaties. Deze factoren worden aangegeven door de tijdstippen die @ryk ziet.
Rails 3 - De fout aanpassen & 404 pagina's SVG: Over het gebruik van en met variabele tekstwaarden Hoe schrijf je een compiler voor een taal in die taal? [duplicaat] Vergelijk bestanden tussen twee takken in TortoiseSVN Sorteer Java-verzameling SIMD / SSE: Controleren of alle vectorelementen niet nul zijn Verschil tussen .Net Core, Portable, Standard, Compact, UWP en PCL?