将逗号分隔的字符串拆分为SSIS中的多行?

时间:2018-02-11 19:18:24

标签: sql sql-server ssis etl ssis-2012

我想根据第一个表的输入在第二个表中实现输出。我想通过SSIS包来做到这一点。

enter image description here

到目前为止,我尝试创建一个包含旁路错误的包,只要有逗号(,),但这不起作用。也尝试使用检查点,也无法实现这一点。

3 个答案:

答案 0 :(得分:2)

第一种方法 - 您可以使用SQL语句

来实现此目的

在数据流任务中,在OLEDB Source中选择源类型为SQL Command并使用以下命令(将Tablename替换为您的表名)

;WITH tmp(ID,  DataItem, [Group]) AS(
SELECT ID, LEFT([Group], CHARINDEX(',', [Group] + ',') -1),
       STUFF([Group], 1, CHARINDEX(',', [Group] + ','), '')
FROM [Tablename]

UNION ALL

SELECT ID,  LEFT([Group], CHARINDEX(',',[Group]+',')-1),
       STUFF([Group], 1, CHARINDEX(',',[Group]+','), '')
FROM tmp
WHERE [Group] > ''
)

SELECT ID,  DataItem
FROM tmp
ORDER BY ID

SQL Fiddle demo

<强>参考

第二种方法 - 使用脚本组件

您可以参考此链接获取详细答案:

答案 1 :(得分:1)

你可以试试这个

SELECT
    tbl.id,
    Splita.a.value('.', 'NVARCHAR(MAX)') [Group]    
    FROM
    (
        SELECT CAST('<X>'+REPLACE( [Group], ',', '</X><X>')+'</X>' AS XML) AS Col1,
             id

      FROM  Table1
    ) AS tbl
    CROSS APPLY Col1.nodes('/X') AS Splita(a)

这是Fiddler链接。

答案 2 :(得分:0)

如果您决定在源数据库上使用TSQL进行拆分,则可以在SQL Server 2016及更高版本上使用STRING_SPLIT()