none
如何以SSIS 輸出以日期為檔名的EXCEL file RRS feed

  • 問題

  • 請問我在 SSIS 以 EXCEL 為輸出 , 但希望 EXCEL 的檔名用日期時間為檔名 ,

    請為應該如何設定 EXCEL 的輸出 ?

    2008年4月7日 上午 07:51

解答

  •  

    自訂一個「資料類型」為「String」的變數,比方說:strExcelFilename,然後在「值」欄位中,使用運算式來計算出你要的日期與時間作為檔名,以下面的範例而言,會組出 yyyymmdd.xls 的檔名:

    Code Snippet

    (DT_STR, 4, 1252) YEAR(GETDATE()) + RIGHT("0" + (DT_STR, 2, 1252) MONTH(GETDATE()), 2) + RIGHT("0" + (DT_STR, 2, 1252) DAY(GETDATE()), 2) + ".xls"

     

    2008年4月8日 上午 07:28
    版主

所有回覆

  •  

    自訂一個「資料類型」為「String」的變數,比方說:strExcelFilename,然後在「值」欄位中,使用運算式來計算出你要的日期與時間作為檔名,以下面的範例而言,會組出 yyyymmdd.xls 的檔名:

    Code Snippet

    (DT_STR, 4, 1252) YEAR(GETDATE()) + RIGHT("0" + (DT_STR, 2, 1252) MONTH(GETDATE()), 2) + RIGHT("0" + (DT_STR, 2, 1252) DAY(GETDATE()), 2) + ".xls"

     

    2008年4月8日 上午 07:28
    版主
  • 謝謝您. 這樣我知道怎麼以日期為檔名了.

    可是還要請教一下 , 要怎麼樣利用此變數 ,

    才能讓資料輸出的excel file 以此日期為檔名 ? 要在那裡設定什麼嗎 ? 謝謝

     

    2008年4月8日 上午 07:53
  • Integration Services 提供系統變數,並支援使用者自訂變數。建立新封裝時,會將容器或工作加入封裝,或建立事件處理常式,Integration Services 包括容器的系統變數集。系統變數包含關於封裝、容器、工作或事件處理常式的有用資訊。例如,在執行階段,MachineName 系統變數包含在其上執行封裝的電腦名稱和封裝執行開始時間 StartTime

     

    您可以建立使用者自訂變數,然後將其用於封裝。在 SSIS 中可以多種方式使用使用者自訂變數:在指令碼中、在優先順序條件約束、「For 迴圈」容器、「衍生的資料行」轉換和「條件式分割」轉換所使用的運算式中,以及在更新屬性值的屬性運算式中。

    例如,您可以在「For 迴圈」容器的評估條件中,使用使用者自訂變數。您還可以將「Foreach 迴圈」容器中的列舉值集合值對應至變數,如果「執行 SQL」工作使用參數化 SQL 陳述式,則可將陳述式的參數對應到變數。

     

    變數在 Integration Services 封裝中有許多不同的使用方式。以你要的結果來說,應該要使用「屬性運算式」:使用變數在設定封裝和封裝物件屬性的屬性運算式中提供值。比方說,

    Code Snippet
    SELECT * FROM @varTableName

     

    上述的運算式會包含更新「執行 SQL」工作所執行之 SQL 陳述式的 varTableName 變數。

     

    Code Snippet
    DATEPART("d", GETDATE()) == 1? @[User::varPackageFirst]:@[User::varPackageOther]"

     

    上述的運算式會在該月的第一天執行 varPackageFirst 變數中指定的封裝,並在其他日子執行 varPackageOther 變數中指定的封裝,來更新「執行封裝」工作所執行的封裝。

     

    詳細作法建議自行參考 SQL Server 2005 的線上叢書 <在封裝中使用屬性運算式>,瞭解要如何設定變數,如何讓 SSIS 的封裝可以用到該變數來產生你要的結果。

    2008年4月8日 下午 12:34
    版主
  • 我的做法是笨方法

    拉一個一般檔案目的地,假設設定為c:\temp.csv

    再利用"Activex 工作"

    利用最簡單的vb script中filesystemobject

    去做rename的動作,每次把產生的temp.csv改成系統日期.csv

    因此,改檔名的這一段code全寫在執行Activex 工作裡

    一樣可以達到效果,加減參考囉

    不過這個容器到sql 2008時似乎就不支援了

    被指令碼工作取代了

     

    2008年4月9日 下午 03:59
  • 謝謝兩位的回覆.

    但我試了好久還是沒有辦法達成需求

    依 Alex 的作法 , 把該檔名當成變數.

     

    我試著用 Alex 的方式 , 將 

    (DT_STR, 4, 1252) YEAR(GETDATE()) + RIGHT("0" + (DT_STR, 2, 1252) MONTH(GETDATE()), 2) + RIGHT("0" + (DT_STR, 2, 1252) DAY(GETDATE()), 2) + ".xls"

     

    放入 excel 目的地的的連接管理員的 ConnectionString 變數的 source 中 , 讓它傳回來成 excel 的檔案名稱 ,

    但卻出現 err msg : 初始化字串的格式和開始於索引 33 的規格不符

    就一直不能過

     

    請問還有其他地方要注意嗎 ? 該如何做才能達到把 Alex 的字串變成檔名呢 ?

     

    2008年4月15日 上午 08:59
  • 請參考:Import Header-Line tables into Dynamic Excel destinations I
    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    如果回覆對您有幫助,請記得按下標示為解答」
    2009年7月25日 上午 05:28
    版主