【问题标题】:SSIS User-Defined TypesSSIS 用户定义类型
【发布时间】:2012-08-25 18:43:25
【问题描述】:

我们正在尝试使用 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 时,它都会不断变回字节流

【问题讨论】:

    标签: sql sql-server-2005 ssis data-conversion


    【解决方案1】:

    您可以尝试分两步进行:

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

    例子:

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

    【讨论】:

    • 理想情况下,我们希望一步完成,但这确实有效。谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多