2011年5月21日 星期六

SSIS資料類型對應的問題

  我有一個封裝,會從遠端FTP下載XML檔案到本機,然後用Foreeach迴圈容器列舉下載來的檔案,將完整檔案名稱寫入filename變數,然後將filename傳入當參數對XML檔作一些檢核,檢核成功之後再傳入filename給執行SQL工作(呼叫SP用OPENROWSET)將XML檔案寫回資料庫。

  原本排程執行都很正常的,突然之間發生錯誤,錯誤擷取訊息如下
  無法大量載入,檔案"c:\file\20110509(X&X-DDD01).XM" 不存在。
  封裝流程如下圖

  我當時只注意到檔案不存在,去看了一下檔案,檔案明明在啊,然後我手動下SP執行看看,也成功載入,仔細看了一下檔案名稱裡有個全型的&符號,這&符號也並非windows下不合法的檔名啊,但我去掉了&符號再執行封裝試試,還真的成功了,難道SSIS封裝對這種全形符號相衝嗎?
  我又回去看了一下錯誤,發現傳入XML的附檔名少了個L耶,看來是參數傳入的問題囉,原本的變數設定與參數對應畫面如下圖
  想了一下,多了個全形符號就出錯,感覺像是Unicode的問題,變數的資料類型為String這應該沒錯,那問題在於傳入的參數對應囉,我原先是設VARCHAR,我改設成NVARCHAR試試,結果成功載入了喔
  我想查一下SSIS中關於變數對應的資訊,可是一直找不到很完整的資料,後來在Mapping Data Types in the Data Flow中有找到類似的資料,裡面有提到System.String對應的是DT_WSTR這資料類型,就是Unicode,也就是說變數是設為String的,參數傳入時最好對應NVARCHAR囉,比較不會發生問題,給各位參考

0 意見:

張貼留言