簡體   English   中英

如何從存儲過程中的臨時表填充數據表

[英]How to fill a datatable from temporary table inside stored procedure

我需要從存儲過程內的臨時表中填充數據表。 問題是數據表未填充。

如果刪除臨時表,則數據表已正確填充

我的查詢:

alter procedure sp_cop_prueba
as
begin
    SELECT PP.* 
    INTO #AUX_01
    FROM
       (SELECT 
           t1.DocEntry , 
           t1.docnum , 
           t1.folionum , 
           CASE
              WHEN T5.DistNumber IS NULL 
                THEN CASE
                       WHEN t1.U_FLEX_ENC01 IS NULL
                            OR t1.U_FLEX_ENC01 = '' 
                         THEN ISNULL((SELECT TOP 1 R5.DistNumber AS 'OP'
                                      FROM vyg.dbo.ODLN R1 
                                      INNER JOIN vyg.dbo.DLN1 R2 ON R1.DocEntry = R2.DocEntry
                                      LEFT JOIN (vyg.dbo.OITL R3 
                                      INNER JOIN vyg.dbo.ITL1 R4 ON R3.LogEntry = R4.LogEntry
                                      INNER JOIN vyg.dbo.OBTN R5 ON R5.SysNumber = R4.SysNumber
                                                                 AND R5.ItemCode = R3.ItemCode)
                                      ON R3.DocType = 15
                                         AND R3.DocEntry = R1.DocEntry
                                         AND R4.ItemCode = R2.ItemCode
                                      WHERE R1.DocType <> 'S'
                                        AND R2.BASETYPE = 13
                                        AND R2.ItemCode = t2.ItemCode
                                        AND R2.BaseRef = T1.DOCNUM) , '')
                         ELSE t1.U_FLEX_ENC01
                      END
              ELSE T5.DistNumber
           END AS 'OP' , 
           t2.ItemCode , 
           t2.Quantity AS 'CANT' , 
           YEAR(t1.DocDate) AS 'año' , 
           MONTH(t1.DocDate) AS 'mes' , 
           DAY(T1.DocDate) AS 'dia' , 
           CASE t2.Quantity
              WHEN 0 THEN 0
                  ELSE t2.LineTotal / t2.Quantity
           END AS 'venta_UNT' , 
           t2.StockPrice AS 'COST_STOCK' , 
           CASE
              WHEN t2.BaseType = 15 THEN 'FG'
                  ELSE CASE
                       WHEN T5.DistNumber IS NULL THEN 'FA'
                           ELSE 'FD'
                       END
           END AS 'TIPO'
        FROM
           vyg.dbo.oinv t1 
        INNER JOIN 
           vyg.dbo.INV1 t2 ON t1.DocEntry = t2.DocEntry --and  t2.BaseType<>15
        LEFT JOIN
           (vyg.dbo.OITL T3 
            INNER JOIN vyg.dbo.ITL1 T4 ON T3.LogEntry = T4.LogEntry
            INNER JOIN vyg.dbo.OBTN T5 ON T5.SysNumber = T4.SysNumber
                                       AND T5.ItemCode = T3.ItemCode)
          ON T3.DocType = CASE t2.BaseType
                             WHEN 15 THEN 15
                             WHEN 17 THEN 13
                          END
             AND T3.DocEntry = CASE t2.BaseType
                                  WHEN 15 THEN t2.BaseDocNum
                                  WHEN 17 THEN t1.DocEntry
                               END
             AND T4.ItemCode = t2.ItemCode
         WHERE 
            T1.DocType <> 'S' --and t2.BaseType<>15--and T5.DistNumber IN (SELECT OP FROM #LISTA_OP)
            --and YEAR(t1.DocDate)=@año and MONTH(t1.DocDate)=@mes
       ) PP;

   select * FROM #AUX_01

   DROP TABLE #AUX_01;
end

Public Function Detalle() As DataTable
    Dim sp As String = "sp_cop_prueba"
    Dim dt As DataTable = New DataTable()

    Dim cmd As OleDb.OleDbCommand = coneccion.objconexion.CreateCommand()
    cmd.CommandText = sp
    cmd.CommandType = CommandType.StoredProcedure

    Dim adap As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
    adap.SelectCommand = cmd

    adap.Fill(dt)

    Return dt
End Function

..開始選擇PP上設置NOCOUNT 。* ..

並刪除放置表行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM