none
SQL 2008 Llenar Tabla con datos de una tabla y de una Table-Valued Function a la vez

    Question

  • Tengo un problemita con Table-Valued Functions, tengo una funcion que crea un registro de datos, pero yo quiero utilizar esta funcion para crear una tabla gigante, entonces por cada registro de la tabla, la funcion debe calcular un registro, ademas de traer otros datos de dicha tabla, actualmete tengo esto:

    INSERT INTO	tblResultado(C1, C2, C3, ..., D1, D2, D3,..., D24)
     
    SELECT		T1, T2, T3, ...,
    (select Col1 from dbo.fncDevPorQtr2(T2, T3, T4, T5),
    (select col2 from dbo.fncDevPorQtr2(T2, T3, T4, T5),
    .
    .
    .
    (select col24 from dbo.fncDevPorQtr2(T2, T3, T4, T5)
    FROM		tblProcedencia

    Es decir C1,C2,.... son columnas de tblResultado y estas se llenan con datos (de manera directa)de la tblProcedencia

    T1, T2, T3,.....son columnas de la tblProcedencia

    D1,D2,D3 son columnas de tblResultado y estas se llenarian con la funcion ( arroja un registro completo) es por eso que hagoel select de columna por columna de esta funcion.

    Espero que me puedan ayudar a hacerlo de manera mas eficiente ya que tarda mucho en correr de la manera que yo lo tengo.

    Como se puede observar los parametros de la funcion vienen de la misma tabla de procedencia.

    Saludos

    Monday, September 10, 2012 3:56 PM

Answers

  • INSERT INTO tblResultado(C1, C2, C3, ..., D1, D2, D3,..., D24)

    SELECT T1, T2, T3, ...,
    F.Col1, F.Col2, F.Col3,...., F.Col24
    .
    .
    .
    FROM tblProcedencia T.

    OUTER APPLY dbo.fncDevPorQtr2(T.T2, T.T3, T.T4, T.T5) F

    • Marked as answer by R-2 Monday, September 17, 2012 7:33 PM
    Monday, September 17, 2012 7:19 AM

All replies


  • Los parametros que pasas aqui:

    (select ColX from dbo.fncDevPorQtr2(T2, T3, T4, T5)

    Son una columna o un valor seleccionado de la columna como: SELECT T2 FROM tblProcedencia WHERE...

    Cual es el criterio para obtener ese valor? Con esa respuesta puedes hacer algo asi:

    declare @col1a <datatype>, @col2a <datatype>, ...
    declare @T2 <datatype>, @T3 <datatype>, ...
    
    select @T2=T2, @T3=T3,... from tblProcedencia
    select @col1a=col1, @col2a=col2a,... from dbo.fncDevPorQtr2(@T2,@T3,...)
    
    insert into tbl (cola,colb,colc,...)
    select col1, colb, colc,...,@col1a, @col2a,... from tblprocedencia

    My Blog

    This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" and "Vote as Helpful" on posts that help you. This can be beneficial to other community members reading the thread.

    Monday, September 10, 2012 5:35 PM
    Moderator
  • no hay criterio, quiero aplicarlo a toda la tabla.

    La tabla final quedara asi:Tn(de la tabla procedencia, todos los registros) Dn(de la funcion con parametros que vienen de la tabla de procedencia)

    T1 T2 T3 T4 …. T10 T11 D1 D2 D3 D4 D5 D24
    Pedro 1 A 123 -191700 -38340.1 0.00165 0.29703 0.30033 0.30363 0.09736 0
    Pedro 1 B 128 191700.4 191700.4 0.00165 0.29703 0.30033 0.30363 0.09736 0
    Mario 1 A 5000   -639476 -127895 0.00165 0.29703 0.30033 0.30363 0.09736   0
    Monday, September 10, 2012 6:12 PM
  • Los parametros que pasas a la funcion son valores escalares que sacas de la tabla procedencia no? Porque de la forma como lo tienes representado en tu ejemplo aparece como si le estuvieras pasando columnas.

    "T1, T2, T3,.....son columnas de la tblProcedencia"

    select Col1 from dbo.fncDevPorQtr2(T2, T3, T4, T5)


    My Blog

    This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" and "Vote as Helpful" on posts that help you. This can be beneficial to other community members reading the thread.

    Monday, September 10, 2012 7:39 PM
    Moderator
  • Exacto, lo que no se como hacer es que lo haga registro a registro (es decir solo pasarle un valor y no toda la columna), es por eso que al principio tenia que elegir una columna a la vez, para que me direa el valor, pero esto toma mucho tiempo.

    Saludos

    Monday, September 10, 2012 8:48 PM
  • Hola.

    No acabo de entender qué es lo que te propones. Usar una función que devuelve una tabla para obtener un escalar no parece que tenga mucho sentido. ¿Se puede ver el código de dicha función? ¿Qué te impide preparar la carga de esa tabla sin emplear la función? Ten en cuenta que estamos hablando de un problema de rendimiento y varias de las cuestiones mencionadas pueden presentar evidentes problemas de rendimiento (funciones que realicen consultas, el uso de subconsultas, etc.)


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    Sunday, September 16, 2012 3:24 PM
    Moderator
  • INSERT INTO tblResultado(C1, C2, C3, ..., D1, D2, D3,..., D24)

    SELECT T1, T2, T3, ...,
    F.Col1, F.Col2, F.Col3,...., F.Col24
    .
    .
    .
    FROM tblProcedencia T.

    OUTER APPLY dbo.fncDevPorQtr2(T.T2, T.T3, T.T4, T.T5) F

    • Marked as answer by R-2 Monday, September 17, 2012 7:33 PM
    Monday, September 17, 2012 7:19 AM
  • ASOMBROSO, ESO ERA EXACTAMENTE LO QUE NECESITABA

    MUCHAS GRACIAS JESÚS LÓPEZ

    Monday, September 17, 2012 7:33 PM