2010-05-26 8 views
18

fondo rápida para los interesados,¿Es posible unirse a una función con valores de tabla y otra mesa con los parámetros

Tengo un maestro detalle mesa (fecha de opciones), a unos 20 detalles de cada registro maestro. Nuestro sistema oltp que está guardando los datos estaba haciendo 21 insertos por cada nueva información que guardamos. Esto estaba matando al servidor, así que estoy tratando de hacerlo funcionar sustituyendo valores separados por comas para la tabla de detalles. Todo parece estar funcionando, excepto que puedo encontrar la manera de recuperar la tabla de detalles. Estoy tratando de usar funciones con valores de tabla, y no está funcionando del todo.

me gustaría llamar algo así como

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

Claramente, eso simplemente no compila.

puedo correr

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

Y puedo volver a una mesa que se parece a mi vieja tabla de detalles.

¿Esto es posible? ¿Tengo algún sentido?

+0

No estoy seguro de dónde se hace esto, en CLR o TSQL? –

+0

TSQL. Si leo en el registro maestro puedo hacerlo fácilmente en C#, pero me gustaría hacerlo en TSQL si es posible. –

Respuesta

33

El APLICAR operador debe hacer el truco:

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

Para esto se necesitan esencialmente la función una vez por fila volvió de MarketDataMaster. "aplicación cruzada" funciona como una combinación interna, en la que solo se devolverán las filas para las que la función devuelve datos; use "outer apply" para una funcionalidad similar a las uniones externas izquierdas.

+2

Impresionante, muchas gracias. Exactamente lo que necesitaba. –

+0

Gracias por su respuesta. –

+0

cross-apply mata el rendimiento cuando se trata de grandes cantidades de datos. ¿Hay alguna alternativa para eso? – HaBo

Cuestiones relacionadas