使用SSIS傳輸包含SQL的CSV文件。使用SSIS傳輸包含SQL(即潛在特殊字符)的CSV文件
我使用.NET創建一個CSV文件,然後使用SSIS包將其轉移到表中。
該文件的內容是一個36字符的GUID和任何可能包含製表符,管道字符和可能的任何類型的字符的SQL文本。我想我會指定我自己的列和行分隔符使用Windows CharMap附件實用程序來爲分隔符選擇不能輸入類型的字符。我分別選擇了1/4和1/2作爲列和行分隔符。
的測試文件,我創建看起來像這樣:
Guid¼Sql½3afc912b-917d-4719-8ded-22e5d95930a3¼SELECT
* FROM
TABLE½a867fa30-f2c7-459e-8985-9ef42616991e¼SELECT
* FROM
TABLE½
文件SSIS文件連接列定義爲
Guid: string [DT_STR] 36
Sql: text stream [DT_TEXT]
我將其傳送到下面的SQL Server目標表:
CREATE TABLE [dbo].[CodeObjectSql](
[Guid] [char](36) NOT NULL,
[Sql] [varchar](max) NOT NULL
) ON [PRIMARY]
當我預覽文件時,列分隔符將顯示爲最後一個(第37個)ch guid第一列和行分隔符的字符顯示爲SQL列值的最後一個字符。
這是我的錯誤:
Error: 0xC02020A1 at Load CodeObjectSql, CodeObjectSql File [1]: Data conversion failed. The data conversion for column "Guid" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".
Error: 0xC020902A at Load CodeObjectSql, CodeObjectSql File [1]: The "output column "Guid" (10)" failed because truncation occurred, and the truncation row disposition on "output column "Guid" (10)" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
Error: 0xC0202092 at Load CodeObjectSql, CodeObjectSql File [1]: An error occurred while processing file "C:\CodeObjectSql.csv" on data row 2.
Error: 0xC0047038 at Load CodeObjectSql, SSIS.Pipeline: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "CodeObjectSql File" (1) returned error code 0xC0202092. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.
然後我試圖改變該文件以Unicode和修改的列類型它們的Unicode等效
Guid: string [DT_WSTR] 36
Sql: text stream [DT_NTEXT]
,仍然沒有運氣。
我的經驗是,SSIS無法在數據中使用文本限定符字符並在文本值中加倍特殊字符來處理數據中出現的行或列分隔符字符。
如果我的假設都基於我的測試是真實的,那麼這種類型數據使用的最佳格式是什麼?
嘗試創建此表並將數據粘貼到輸入文件中並親自查看。 :-)
你把所有的數據放在一行,但我正在尋找一個關於如何導入CSV文件的答案是數據是腳本存儲過程中的數據庫。腳本中可以包含CR \ LF字符,製表符,管道符和逗號。我選擇奇怪的派系角色作爲我的行和列分隔符的原因正是他們是不尋常的,而且不太可能發生在數據中!此外,我以前是我們的DT-STR(36),但是我得到了上面顯示的錯誤。那時我拼命嘗試unicode相當於無濟於事。 – ChadD
ChadD - 一些評論:1.道歉,我沒有正確理解你的輸入文件格式,因此使用所有的一行格式。我將處理確切的格式並回復2.如果您正在創建源文件(而不是其他人發送它),那麼您將擁有更多的靈活性。你能不能利用這種靈活性來創建更加一致的輸出結果? Guid1/2Sql xxx1/2SQL1 xxx21/2SQL2? –
ChadD - 我嘗試過,無法做到。我強烈地感覺到生成這個源文件的過程需要修改,以便輸出格式良好的CSV(字符分隔值)。你能發佈生成源文件的代碼嗎?我希望看到並學習您的解決方案。問候! –