2012-08-30 108 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