2010-05-26 8 views
18

Schnell Hintergrund für die Interessenten,Ist es möglich, eine Tabellenwertfunktion und eine andere Tabelle mit den Parametern

Ich habe ein Master-Detail-Tabelle (Optionen Datum), etwa 20 Angaben zu jedem Stammsatz zu verbinden. Unser Oltp-System, das die Daten speichert, bestand aus 21 Einfügungen für jede neue Information, die wir gespeichert haben. Das hat den Server getötet, also versuche ich, das zu erreichen, indem ich kommagetrennte Werte für die Details-Tabelle ersetze. Alles scheint zu funktionieren, außer dass ich herausfinden kann, wie man die Detailtabelle zurückbekommt. Ich versuche, Tabellenfunktionen zu verwenden, und es funktioniert nicht ganz.

würde Ich mag, etwas zu nennen wie

Select Top 100 * 
FROM dbo.fn_MarketDataDetails (MarketDataMasterID) mdd 
INNER JOIN MarketDataMaster mdm on mdm.MarketDataMasterID = mdd.MarketDataMasterID 

ist klar, dass nicht kompiliert einfach nicht.

kann ich

Select Top 100 * 
FROM dbo.fn_MarketDataDetails (15425) // Assuming 15425 is a valid MarketDataMasterID 

laufen Und ich bekomme eine Tabelle zurück, die wie meine alten Details Tabelle aussieht.

Ist das überhaupt möglich? Mache ich einen Sinn?

+0

Es ist mir nicht klar, wo Sie das tun - in CLR oder TSQL? –

+0

TSQL. Wenn ich den Master Record einlese, kann ich das leicht in C# machen, aber ich würde es gerne in TSQL machen, wenn es möglich ist. –

Antwort

33

Die APPLY-Operator sollte es tun:

SELECT * 
from MarketDataMaster 
cross apply dbo.fn_MarketDataDetails (MarketDataMasterID) 

Diese im Wesentlichen ruft die Funktion einmal pro Zeile von MarketDataMaster zurückgegeben. "cross apply" funktioniert wie ein innerer Join, indem nur Zeilen zurückgegeben werden, für die Daten von der Funktion zurückgegeben werden. Verwenden Sie "äußere Anwendung" für ähnliche Funktionen wie linke äußere Verbindungen.

+2

Super, vielen Dank. Genau das, was ich brauchte. –

+0

Danke für Ihre Antwort. –

+0

cross apply tötet die Performance beim Umgang mit riesigen Datenmengen. Gibt es eine Alternative dafür? – HaBo

Verwandte Themen