我的存储过程创建并填充一个表@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]
当我尝试使用旧版本时,没有创建表时,过程仅在链接服务器中写入第一行。
有什么建议吗?
谢谢