Die Lösung des gordischen Knotens: T-SQL objektorientiert UND schnell

Pro­gram­mie­rern aus der Welt der objekt­ori­en­tier­ten oder pro­ze­du­ra­len Spra­chen dürfte es beim Blick in so man­che Micro­soft-SQL-Daten­bank die Haare zu Berge ste­hen las­sen. Die glei­che Pro­gramm­lo­gik wird häu­fig immer und immer wie­der geschrie­ben und dies an ver­schie­dens­ten Stel­len in der Daten­bank. Das ist umso erstaun­li­cher, weil es bereits seit der SQL-Ser­ver-Ver­sion 2005 soge­nannte benut­zer­de­fi­nierte Funk­tio­nen gibt, die genau dies ver­hin­dern sol­len. Warum also wer­den diese nicht ver­wen­det? Die Ursa­che ist ihre teil­weise kata­stro­phale Per­for­mance. Nutzt man diese Skalar­wert­funk­tio­nen zur Zen­tra­li­sie­rung des Quell­codes muss man wohl oder übel ein schlech­tes Lauf­zeit­ver­hal­ten in Kauf neh­men. Von daher hat man die Wahl zwi­schen Pest oder Cho­lera – sau­bere Archi­tek­tur oder gute Per­for­mance.
Zum Glück ist aber auch die Daten­bank­welt nicht ganz so schlecht wie es auf den ers­ten Blick scheint. Mit ein paar weni­gen Hand­grif­fen kann man tat­säch­lich den Quell­code zen­tra­li­sie­ren und das bei sehr gutem Lauf­zeit­ver­hal­ten. Wie das geht? Ein­fach wei­ter­le­sen… wei­ter­le­sen…

ParentChild-Tabellen flachklopfen’ – Cross Apply

In die­sem Bei­trag stelle ich Ihnen die Ver­wen­dung von CROSS und OUTER APPLY vor. Seit SQL Ser­ver 2005 exis­tiert der Apply Ope­ra­tor und ist in der Tat eine tolle Erwei­te­rung in T-SQL.
Soll­ten Sie die Hilfe von SQL Ser­ver zur Rate zie­hen, wird es im ers­ten Blick nicht ganz deut­lich, was der Apply Ope­ra­tor denn wirk­lich für einen Vor­teil bringt. Dort heißt es wört­lich:
Der APPLY-Ope­ra­tor ermög­licht Ihnen das Auf­ru­fen einer Tabel­len­wert­funk­tion für sämt­li­che Zei­len, die von einem äuße­ren Aus­druck einer Tabelle einer Abfrage zurück­ge­ge­ben wer­den. Die Tabel­len­wert­funk­tion dient als rechte Ein­gabe, der äußere /Ausdruck der Tabelle agiert als linke Ein­gabe. Die rechte Ein­gabe wird für jede Zeile aus der lin­ken Ein­gabe aus­ge­wer­tet, und die erstell­ten Zei­len wer­den für die end­gül­tige Aus­gabe kom­bi­niert. Bei der Liste der vom APPLY-Ope­ra­tor erstell­ten Spal­ten han­delt es sich um den Satz von Spal­ten in der lin­ken Ein­gabe, gefolgt von der Liste der von der rech­ten Ein­gabe zurück­ge­ge­be­nen Spal­ten.”
In die­ser Ver­öf­fent­li­chung stelle ich Ihnen einer der Mög­lich­kei­ten der Nut­zung von APPLY vor und zwar in mei­nen Augen das meist­be­nutzte Sze­na­rium. wei­ter­le­sen…