2011-10-13 99 views
0

我正在寻找使用SSIS来转换单个源表格中保存的数据。其中一个单元格有一串字符。例如:使用SSIS拆分单元格

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

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

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

任何想法,我会怎么做,或者即使SSIS是正确的工具使用。

非常感谢

+0

问题很混乱,您应该编辑您的问题并添加真实世界的例子:输入行和所有输出行。但是,在SSIS中使用派生列和数据透视/ Unpivot。测试性能并决定您是否将建议使用SSIS或SQL作为LeedsDBA。 –

回答

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中的ss。

相关问题