2017-09-20 3 views
0

実行しようとしているSSISパッケージがありますが、多くのデータのバッファが原因で常に失敗します。これは私の最初の走りにあります。私は今日のデータを今日の日付から30日間だけ取得し、その挿入を行うべきだと思った。私の質問は、過去30日間の日付を取得してから、今後30日間もう一度やり直し、データウェアハウスにすべてのデータを挿入するまでです。多くの行のデータが原因でSSISパッケージの最初の実行に失敗する

それは、私はそれが次の実行に再びこれを行うが、これの終わりから次の30日間を取得したいと思うこれらを挿入して行わ得た後、私のクエリは、この

SELECT db_name() dbname, TicketType, TicketNo source_bk, UniqueID, ItemNo, CASE WHEN VehicleID = '' THEN '-1' ELSE VehicleID END VehicleID 
, CASE WHEN TicketID = '' THEN '-1' ELSE TicketID END TicketID, 
case when p.purchaseOrder = '' then 'unknown' else p.PurchaseOrder end as PurchaseOrder, TicketDate, TicketTime, S1.LocationID 
, S1.CustomerID, S1.OrderID, OrderItem, ProductID, MixID, S1.TaxCodeID, S1.CarrierID, Description, DeliveryAddress1 
, Gross, Tare, Net, Qty, Unit, FreightQty, FreightPayQty, S1.Price, S1.FreightRate, S1.FreightAmount, S1.FreightPay 
, FreightPayAmount, TodayLoads, TodayQty, OrderLoads, OrderQty, AltTicketQty, AltTicketQtyEdited, TodayAmount 
, 'Posted' as [Source] FROM tkhist1 S1 WITH (NOLOCK) 
join [dbo].[Slordnam] p 
on s1.customerID = p.CustomerID 
where s1.TicketDate >= CURRENT_TIMESTAMP -30 
UNION 
SELECT db_name() dbname, TicketType, TicketNo source_bk, UniqueID, ItemNo, CASE WHEN VehicleID = '' THEN '-1' ELSE VehicleID END VehicleID 
, CASE WHEN TicketID = '' THEN '-1' ELSE TicketID END TicketID, 
case when p.purchaseOrder = '' then 'unknown' else p.PurchaseOrder end as PurchaseOrder, TicketDate, TicketTime, S1.LocationID 
, S1.CustomerID, S1.OrderID, OrderItem, ProductID, MixID, S1.TaxCodeID, S1.CarrierID, Description, DeliveryAddress1 
, Gross, Tare, Net, Qty, Unit, FreightQty, FreightPayQty, S1.Price, S1.FreightRate, S1.FreightAmount, S1.FreightPay 
, FreightPayAmount, TodayLoads, TodayQty, OrderLoads, OrderQty, AltTicketQty, AltTicketQtyEdited, TodayAmount 
, 'Posted' as [Source] FROM Tkbatch S1 WITH (NOLOCK) 
join [dbo].[Slordnam] p 
on s1.customerID = p.CustomerID 
where s1.TicketDate >= CURRENT_TIMESTAMP -30 
UNION 
SELECT db_name() dbname, TicketType, TicketNo source_bk, UniqueID, ItemNo, CASE WHEN VehicleID = '' THEN '-1' ELSE VehicleID END VehicleID 
, CASE WHEN TicketID = '' THEN '-1' ELSE TicketID END TicketID, 
case when p.purchaseOrder = '' then 'unknown' else p.PurchaseOrder end as PurchaseOrder, TicketDate, TicketTime, S1.LocationID 
, S1.CustomerID, S1.OrderID, OrderItem, ProductID, MixID, S1.TaxCodeID, S1.CarrierID, Description, DeliveryAddress1 
, Gross, Tare, Net, Qty, Unit, FreightQty, FreightPayQty, S1.Price, S1.FreightRate, S1.FreightAmount, S1.FreightPay 
, FreightPayAmount, TodayLoads, TodayQty, OrderLoads, OrderQty, AltTicketQty, AltTicketQtyEdited, TodayAmount 
, 'Posted' as [Source] FROM Tkscale S1 WITH (NOLOCK) 
join [dbo].[Slordnam] p 
on s1.customerID = p.CustomerID 
where s1.TicketDate >= CURRENT_TIMESTAMP -30 

のように見えます。だから私がすでに持っているのは、このデータが各ループごとに用意されている多くのデータベースから来ており、各データベースでこれを実行しているからです。私はそれが今のところまったく走ることができないので、それは今から30日後に最初の実行のためのプロセスを何度もやり直したい。それから私は、新しいデータのみ

を行うためにCDCを行うだろう

答えて

1

考慮すべき2つの答え...

一つは、あなたが「多くのデータに」意味ですか - SSISは、どのくらいのデータに制限はありません。あなたはデータフローを使いたいと思う。サーバーがクエリを処理できない、またはSSISで検索を実行してメモリなどが不足していると言っているとしますか?要するに、このような制限がなければならないので、別のやり方でこれにアプローチするのが賢明かもしれないように思えます。

2つ目は、一度に行のセットを処理したい場合は、クエリを動的にして、ループごとに30日間増分するForループ保存を実行します。動的SQLは、さまざまな方法で作成できます。これらのメソッドは、使用している接続のタイプと、すべてが賛否両論のように好きな方法によって異なります。任意のリレーショナル接続で動作する最も柔軟で一貫性のある方法は、文字列変数を作成し、それをvbscriptに基づいて設定することです。

私は役立つことを願っています。

+0

お返事ありがとうございます。何が起こったのかというと、他の誰かが作成したSSISパッケージを継承して、すでに動作していると言いましたが、実行しようとしたときには動作しませんでした。しかし、あなたは正しく私は問題があってはならないので、私がやったことはそれを徹底的に取り除き、再構築しました。そして今はうまくいきます。 – josh

関連する問題