我们正在尝试使用SSIS包从平面文件将数据导入我们的SQL 2005数据库。
我们的数据库有一个用于保存一些相关信息的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中,我有一个数据集,其中所有列都由变量表示,但我如何组合它们并将它们转换为dbo.CustomType?
====
更新:
在OLE DB Command对象中使用insert语句而不是OLE DB Destination时,我能够插入自定义类型。
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 Native Client 10.0”Hresult:0x80040E21描述:“转换规范的字符值无效”。
似乎是在尝试将我的字符串列转换为字节流,但每当我尝试在高级编辑器中将Param_0更改为String时,它会不断更改回字节流
答案 0 :(得分:2)
您可以分两步尝试:
示例:
insert into DestinationTable
select convert(dbo.Customtype, DecimalColumn1, DecimalColumn2, IntColumn1, DecimalColumn3, IntColumn2)
from StaggingTable