插入更多行的OPENQUERY

问题描述 投票:0回答:1

我的存储过程创建并填充一个表@t,现在我要在链接的MySQL服务器中插入选择结果集

    CREATE PROCEDURE dbo.setWeightStatByDate
      @DataIN VARCHAR(8)
    AS 

      DECLARE @totPezzi INT
      DECLARE @seconds_per_item INT
      DECLARE @Delta_Pezzo DECIMAL(10,2)
      DECLARE @conca VARCHAR(20)
      DECLARE @weighed_start VARCHAR(20)
      DECLARE @weighed_end VARCHAR(20)
      DECLARE @weighed_by_tx VARCHAR(20)
      DECLARE @converted_weighed_start TIME
      DECLARE @converted_weighed_end TIME
      DECLARE @time_diff TIME
      DECLARE @t table(cliente VARCHAR(20), data_pesatura DATE, collo VARCHAR(20), tot_pezzi INT, operatore VARCHAR(20), inizio_pesatura TIME, fine_pesatura TIME, tempo_pesatura TIME, secondi_per_item INT, delta_pezzo DECIMAL(10,2))

      /* Dichiaro un cursore con la lista dei colli pesati nel giorno */
      DECLARE curs CURSOR FOR SELECT conca, weighed_start, weighed_end, weighed_by_tx FROM db_posizioni_v01 WHERE weighed_on = @DataIN;

      OPEN curs
      FETCH NEXT FROM curs INTO @conca, @weighed_start, @weighed_end, @weighed_by_tx

      WHILE @@FETCH_STATUS = 0
        BEGIN

          SET @Delta_Pezzo = 0

          /* Recupero il totale dei pezzi caricati nel collo pesato nella data indicata */
          SET @totPezzi = (SELECT COALESCE(SUM(db_giacenze.qta),0) from db_giacenze LEFT JOIN db_posizioni on db_posizioni.conca=db_giacenze.mag where db_posizioni.weighed_on = @DataIN and db_giacenze.mag=@conca)

          SET @converted_weighed_start = CAST(STUFF(STUFF(SUBSTRING(@weighed_start,9,6),5,0,':'),3,0,':') AS time)
          SET @converted_weighed_end = CAST(STUFF(STUFF(SUBSTRING(@weighed_end,9,6),5,0,':'),3,0,':') AS time)

          SET @time_diff = CAST(@converted_weighed_end as datetime) - CAST(@converted_weighed_start as datetime)

          SET @seconds_per_item = DATEDIFF(second,0,CAST(@time_diff as datetime))

          IF @totPezzi > 0
            SET @Delta_Pezzo = @seconds_per_item/CONVERT(DECIMAL(10,2),@totPezzi)

      /* Old Version ----------
INSERT OPENQUERY (MYTMLSTATS, 'SELECT customername,competence,box_tx,items_nr,weighed_by_tx,begin_at,end_at,tot_time,tot_time_sec,time_for_item FROM db_stats.WeightStatByDate')
      (customername,competence,box_tx,items_nr,weighed_by_tx,begin_at,end_at,tot_time,tot_time_sec,time_for_item)
      SELECT 'FIRST',
      (SELECT CONVERT(DATE, @DataIN)),
      (SELECT @conca),
      (SELECT @totPezzi),
      (SELECT @weighed_by_tx),
      (SELECT @converted_weighed_start),
      (SELECT @converted_weighed_end),
      (SELECT @time_diff),
      (SELECT @seconds_per_item),
      (SELECT @Delta_Pezzo)*/

          INSERT @t VALUES('FIRST',CONVERT(DATE, @DataIN), @conca, @totPezzi, @weighed_by_tx, @converted_weighed_start, @converted_weighed_end, @time_diff, @seconds_per_item, @Delta_Pezzo)

          FETCH NEXT FROM curs INTO @conca, @weighed_start, @weighed_end, @weighed_by_tx
        END

      CLOSE curs  
      DEALLOCATE curs 

      INSERT INTO OPENQUERY (MYTMLSTATS, 'SELECT customername,competence,box_tx,items_nr,weighed_by_tx,begin_at,end_at,tot_time,tot_time_sec,time_for_item FROM db_stats.WeightStatByDate')
      (customername,competence,box_tx,items_nr,weighed_by_tx,begin_at,end_at,tot_time,tot_time_sec,time_for_item)
      SELECT cliente, data_pesatura, collo, tot_pezzi, operatore, inizio_pesatura, fine_pesatura, tempo_pesatura, secondi_per_item, delta_pezzo from @t

      /*SELECT * from @t*/

    GO

当过程执行行INSERT INTO OPENQUERY ....我遇到此错误:

SQL.sql: Error (63,1): Procedure setWeightStatByDate. The OLE DB provider "MSDASQL" for linked server "MYTMLSTATS" reported an error. The provider did not give any information about the error.
SQL.sql: Error (63,1): Procedure setWeightStatByDate. The OLE DB provider "MSDASQL" for linked server "MYTMLSTATS" could not INSERT INTO table "[MSDASQL]". Unknown provider error.
Execute failed [5,117s]

当我尝试使用旧版本时,没有创建表时,过程仅在链接服务器中写入第一行。

有什么建议吗?

谢谢

linked-server openquery
1个回答
0
投票
这里有同样的问题,请任何人帮忙!
© www.soinside.com 2019 - 2024. All rights reserved.