2012-08-30 146 views
2

我們試圖使用SSIS包從平面文件導入數據到我們的SQL 2005數據庫。SSIS用戶定義類型

我們的數據庫有一個CLR用戶定義類型,我們用它來保存一些相關信息,我們稱之爲dbo.CustomType。

在SQL創建dbo.CustomType的對象,我可以做到以下幾點:

DECLARE @Decimal1 DECIMAL(18,6), 
     @Int1  INT, 
     @Decimal2 DECIMAL(18,6), 
     @Int2  INT, 
     @Decimal3 DECIMAL(18,6) 


SELECT @Decimal1 = 1.5, 
     @Int1  = 1, 
     @Decimal2 = 2.5, 
     @Int2  = 2, 
     @Decimal3 = 3 



SELECT 
    CONVERT(
       dbo.CustomType, 
       CONVERT(VARCHAR(20), @Decimal1) + ';' + 
       CONVERT(VARCHAR(20), @Decimal2) + ':' + 
       CONVERT(VARCHAR(2), @Int1) + ';' + 
       CONVERT(VARCHAR(20), @Decimal3) + ':' + 
       CONVERT(VARCHAR(2), @Int2) 
      ) 

在SSIS我有了所有的變量represetend列的數據集,但我怎麼能結合他們並將其轉換爲dbo.CustomType?

====

UPDATE:

使用OLE DB Command對象,而不是OLE DB目標內的INSERT語句的時候,我能夠插入自定義類型。

SO:

INSERT INTO Greg 
VALUES (CONVERT(dbo.CustomType, '1;1:1;1:1;')) 

作品,但

INSERT INTO Greg 
VALUES (Convert(dbo.Customtype, ?)) 

給出了一個錯誤

[OLE DB命令[3103]錯誤:SSIS錯誤代碼DTS_E_OLEDBERROR。發生了OLE DB錯誤。錯誤代碼:0x80040E21。 OLE DB記錄可用。源:「Microsoft SQL Server本機客戶端10.0」Hresult:0x80040E21描述:「無效的字符值轉換規範」。

這似乎是想我的字符串列轉換爲字節流,但每當我試圖在這不斷變化的回字節流的高級編輯Param_0更改爲字符串

回答

2

你可以嘗試做的兩個步驟:

  1. 在數據流任務此數據插入到表腳手架分離柱,
  2. 然後在執行SQL任務從腳手架表到目的地,轉換插入數據

例子:

insert into DestinationTable 
select convert(dbo.Customtype, DecimalColumn1, DecimalColumn2, IntColumn1, DecimalColumn3, IntColumn2) 
from StaggingTable 
+0

理想情況下,我們希望做一個步驟,但這樣做的工作。謝謝 – Greg