2013-04-23 143 views
0

我想弄清楚如何將現有的DTS文件轉換爲託管在SQL 2005服務器上的DTSX。將SSIS中的列拆分爲數字部分和列值的其餘部分

在我的第一次嘗試(第一DTS)我已經卡住了。

我不想看看如何使用DTS完成任務,並且要專注於新的DTSX技術。

需要做些什麼。

  • 檢查輸入文件是否存在其他退出。(尚未完成)
  • 截斷目標表
  • 文件導入到數據庫
  • 報告,如果一切是好的。

步驟導入文件是我卡住的地方。我有一個固定的列大小平坦的tekst文件,其中housenumber和擴展名在一個列中。數據庫有兩列。

我第一次嘗試派生列,但可以找到一個檢查splittng(第一)數字部分。

當搜索的使用正則表達式的我讀到了「腳本組件」,我讀的是不兼容SQL 2005

是否有另一種可能性?

這使我第二個問題:是否可以使用SQL Server數據工具(SSDT),在SQL Server 2005

+0

你可以發佈'housenumber'和'extension'的樣本數據嗎? – praveen 2013-04-23 14:42:15

+0

它只是一個數字部分和擴展名:可能是「2B」,「24 A」,「15 II」或類似的東西。所以我想要數字的第一部分。其次是一些不是數字的東西(可能是被另一個數字部分覆蓋的空白) – 2013-04-23 14:52:18

+0

AFAIK SSIS沒有任何函數使用'通配符'來執行'正則表達式匹配',但您始終可以使用'腳本component'來提取數字和字符串.Ex「@」\ d +「'或'[A-Za-z] +'.BTW爲什麼'腳本組件與SQL 2005'不兼容? – praveen 2013-04-23 15:17:22

回答

0

你有一份工作之前,你。您需要使用Derived Column轉換,請查看它們。將Data Viewers添加到您的數據流將會很有幫助,這樣您就可以看到什麼數據在流中移動,以及SSIS認爲在那裏。對你而言,你將不得不操縱字符串。有兩種字符串數據類型,DT_STR和DT_WSTR(例如,VARCHAR和NVARCHAR)。 SSIS對數據類型非常特別,您可能需要使用投射操作將一種類型轉換爲另一種類型。例如,(DT_WSTR,50)Blah將列Blah中的五十個字符轉換爲DT_WSTR。 DT_STR類型也需要知道代碼頁。例如像1252

您可能需要的Immediate If的SSIS版本,如果條件爲真,並返回任何一個結果或其他哪些檢查:胡說== 100?1:0這樣的結果將是一個1表示列Blah等於100的記錄,0表示所有其他記錄的記錄。你可以嵌套這些立即如果語句,一個在下一個內部,另一個在內部,等等。

您需要在派生列小部件中創建至少兩個新列,其中一個用於數字,另一個用於後續內容。所以這是一種非常痛苦的方式來做你想做的事情。使用字符串函數來檢查第一個字符是否是數字,然後返回或不。對第二個字符等做同樣的操作。

當然,我確信有更好的方法來做到這一點。您的工具箱由Derived Column小部件中的函數組成,所以這就是您必須使用的。 (或者,或者,在這種情況下,您可能會更好地使用SQL UPDATE語句,該語句將作爲上述控制流中的後續任務執行,而不是在下面的數據流中執行。)

公平的警告:SQL Server 2005版本的SSIS有許多許多錯誤和挫折,這些錯誤和挫折在SQL Server的更高版本中得到修復或改進。即使你只是去SQL Server 2008,你也會爲自己節省很多麻煩。