2

我们正在尝试使用 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 命令对象而不是 OLE DB 目标中使用插入语句时,我能够插入自定义类型。

所以:

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 时,它都会不断变回字节流

4

1 回答 1

2

您可以尝试分两步进行:

  1. 在数据流任务中将此数据插入临时表以分隔列,
  2. 然后在执行 SQL 任务中使用转换将数据从临时表插入到目标

例子:

insert into DestinationTable
select convert(dbo.Customtype, DecimalColumn1, DecimalColumn2, IntColumn1, DecimalColumn3, IntColumn2)
from StaggingTable
于 2012-08-31T09:57:13.137 回答