2010-05-26 8 views
18

Szybkie tła dla zainteresowanych,Czy to możliwe, aby przyłączyć się do funkcji tabeli wyceniane i inną tabelę z parametrami

Mam mistrz szczegół tabeli (data opcje), około 20 Szczegóły dla każdego rekordu nadrzędnego. Nasz system oltp, który zapisuje dane, wykonał 21 przekładek dla każdej zapisanej nowej informacji. To zabijało serwer, więc próbuję to zrobić, zastępując wartości rozdzielone przecinkami dla tabeli szczegółów. Wszystko wydaje się działać, z wyjątkiem tego, że mogę wymyślić, jak odzyskać tabelę szczegółów. Próbuję korzystać z funkcji wycenianych w tabeli, i to nie działa.

Chciałbym nazwać coś takiego

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

Oczywiste jest, że po prostu nie kompiluje.

mogę uruchomić

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

I wrócę tabelę, która wygląda jak mój stary Właściwości tabeli.

Czy to możliwe? Czy mam jakiś sens?

+0

Nie jest dla mnie jasne, gdzie to robisz - w CLR lub TSQL? –

+0

TSQL. Jeśli czytam w Master Record, mogę to łatwo zrobić w C#, ale chciałbym zrobić to w TSQL, jeśli to możliwe. –

Odpowiedz

33

Zastosuj operator powinien załatwić sprawę:

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

ten zasadniczo wywołuje funkcję raz na wiersz zwrócony z MarketDataMaster. "Zastosuj krzyż" działa jak sprzężenie wewnętrzne w tym, że zwracane są tylko te wiersze, dla których zwracane są dane przez funkcję; użyj "outer apply" dla funkcjonalności podobnej do lewych złączeń zewnętrznych.

+2

Niesamowite, dziękuję bardzo. Dokładnie to, czego potrzebowałem. –

+0

Dzięki za odpowiedź. –

+0

Zastosowanie krzyża zabija wykonanie, gdy mamy do czynienia z ogromnymi danymi. Czy są jakieś alternatywy? – HaBo

Powiązane problemy