使用SSIS拆分细胞

时间:2011-10-13 11:19:18

标签: tsql sql-server-2008 ssis

我希望使用SSIS来转换从单个源表中保存的数据。其中一个单元格有一串字符。例如:

##/\/\/\/\/\##HHHHHHBBBB##/\/\/\/\/\

同一行还有另一个包含日期的单元格。

基本上我希望将该字符串中的每个字符作为一个自己的行传输到新表。前两个字符表示另一个单元格中给出的日期。接下来的两个字符代表第二天,依此类推。因此,除了拥有每个角色外,我还想增加数据并存储它。

我知道如何做到这一点,或者即使SSIS是正确使用的工具。

非常感谢

1 个答案:

答案 0 :(得分:0)

我想知道你是否最好先通过SQL中的分裂字符串函数来运行它?这样你就可以在日期旁边为每个角色获取行,然后你可以直接将它输出到目的地。

我已经创建了一个促进此功能的功能:

CREATE FUNCTION [dbo].[udf_SplitStringIntoRows](@text varchar(max))
    RETURNS @tbl TABLE ([value] char(1) NOT NULL)
AS
BEGIN

    WHILE len(@text) > 0
    BEGIN
        INSERT INTO @tbl
        SELECT left(@text,1)

        SET @text = RIGHT(@text,len(@text)-1)

    END

    RETURN
END

然后,为了测试数据,我创建了一个包含数据的快速临时表:

DECLARE @source as TABLE([value] varchar(max), [date] datetime)

INSERT INTO @source
SELECT '##/\/\/\/\/\##HHHHHHBBBB##/\/\/\/\/\', getdate()
UNION
SELECT '##/\/\/\/\/\##HHHHHHBBBB##/\/\/\/\/\', getdate()+1
UNION
SELECT '##/\/\/\/\/\##HHHHHHBBBB##/\/\/\/\/\', getdate()+2

然后将函数交叉应用于此数据集:

SELECT d.[value], s.date
FROM @source s
CROSS APPLY dbo.[udf_SplitStringIntoRows](s.value) d

这应该为您提供在SSIS中进一步处理所需的源数据集。