我對SSIS仍然非常陌生,並且通常在SQL中還有很長一段時間。我創建了一個數據流任務,用於從表中提取與UNION ALL腳本相匹配的記錄,並將它們轉儲到服務器上的.CSV文件。然後我添加了一個FTP任務將文件上傳到收件人進行處理。轉儲數據的標準之一是表中的TransDate字段爲空,並且StartDate字段與今天相同。因爲有4個StartDates和4個TransDates,所以我使用UNION All並根據它的4組數據中的哪一組來分配「行號」。我缺少的是驗證轉儲到CSV的記錄的方法,然後設置與該行對應的TransDate。將數據導出爲CSV後SQL中的更新記錄
SELECT
CallLog.CallID as Ticket
, 1 as Line
, CallLog.CustID as Store#
, AcctNum as SoldTo
, CAST(BillStart01 as DATE) as BillStart
, Cast(BillEnd01 as DATE) as BillEnd
, CostSheet01 as BillAmount
, SKU01 as SKU
, Term01 as Terms
, CAST(EffDate01 as DATE) as EffStart
, CAST(EffDate02 as DATE) as EffEnd
FROM
CallLog, Detail, Subset
WHERE
(CallLog.CallID=Detail.CallID and CallLog.CallID=Subset.CallID)
AND CallType='Contract'
AND TransDate01 = ''
AND Cast(SentOps as Date) = CONVERT(date,GETDATE())
AND Month(RcvDate01) <= Month(GETDATE())
AND YEAR(RcvDate01) = YEAR(GetDate())
UNION ALL
SELECT CallLog.CallID as Ticket
, 2 as Line
, CallLog.CustID as Store#
, AcctNum as SoldTo
, CAST(BillStart 02 as DATE) as BillStart
, Cast(BillEnd02 as DATE) as BillEnd
, CostSheet02 as BillAmount
, SKU02 as SKU
, Term02 as Terms
, CAST(EffDate01 as DATE) as EffStart
, CAST(EffDate02 as DATE) as EffEnd
FROM
CallLog, Detail, Subset
WHERE
(CallLog.CallID=Detail.CallID and CallLog.CallID=Subset.CallID)
AND CallType='Contract'
AND TransDate02 = ''
AND Cast(SentOps as Date) = CONVERT(date,GETDATE())
AND Month(RcvDate02) <= Month(GETDATE())
AND YEAR(RcvDate02)=YEAR(GetDate())
UNION ALL
SELECT
CallLog.CallID as Ticket
, 3 as Line
, CallLog.CustID as Store#
, AcctNum as SoldTo
, CAST(BillStart 03 as DATE) as BillStart
, Cast(BillEnd03 as DATE) as BillEnd
, CostSheet03 as BillAmount
, SKU03 as SKU
, Term03 as Terms
, CAST(EffDate01 as DATE) as EffStart
, CAST(EffDate02 as DATE) as EffEnd
FROM
CallLog, Detail, Subset
WHERE
(CallLog.CallID=Detail.CallID and CallLog.CallID=Subset.CallID)
AND CallType='Contract'
AND TransDate03 = ''
AND Cast(SentOps as Date) = CONVERT(date,GETDATE())
AND Month(RcvDate03) <= Month(GETDATE())
AND YEAR(RcvDate03) = YEAR(GetDate())
UNION ALL
SELECT
CallLog.CallID as Ticket
, 4 as Line
, CallLog.CustID as Store#
, AcctNum as SoldTo
, CAST(BillStart 04 as DATE) as BillStart
, Cast(BillEnd04 as DATE) as BillEnd
, CostSheet04 as BillAmount
, SKU04 as SKU
, Term04 as Terms
, CAST(EffDate01 as DATE) as EffStart
, CAST(EffDate02 as DATE) as EffEnd
FROM
CallLog, Detail, Subset
WHERE
(CallLog.CallID=Detail.CallID AND CallLog.CallID=Subset.CallID)
AND CallType='Contract'
AND TransDate04 = ''
AND Cast(SentOps as Date) = CONVERT(date,GETDATE())
AND Month(RcvDate04)<=Month(GETDATE())
AND YEAR(RcvDate04)=YEAR(GetDate())
Order BY Ticket, Line
任何幫助/方向表示讚賞。
謝謝
傑夫
Anoop,因爲我還是新手,這對我來說沒有什麼意義。使用UNION ALL的select語句正在提取我需要的記錄,我只需要返回並更新TransDate以顯示記錄被拉出。我認爲如果Ticket = 123和line = 1出現在csv中,那麼應該很容易說出,轉到SQL表中的記錄123並設置TransDate01 = today,然後處理所有爲csv提取的記錄文件。我可以在SQL中的表與UPDATE腳本之間做到這一點,我只是不知道如何在SSIS中執行任何操作。 – Elecdoc 2013-03-22 14:45:38
我可以說你有兩件事要做 - 創建一個csv文件,然後更新一個用作源的表?如果是的話,那麼你能否使用SQL來識別和標記這些記錄(正如你所提到的)並且只需使用SSIS創建CSV?這會爲您節省往返時間。 – 2013-03-22 17:48:39
如果我正確閱讀這篇文章,你說我應該更新TransDate字段作爲第一步,然後拉動有TransDate的記錄?不幸的是,這是一個全天運行多次的過程,大概每15分鐘一次,我不想多次拉同一個記錄,因爲這是一個計費應用程序。我現在的想法是放入臨時步驟,將記錄轉儲到SQL中的臨時表中,使用它來驗證記錄以更新TransDate,然後將內容或臨時錶轉儲到csv,然後清除臨時表。 – Elecdoc 2013-03-22 19:37:38