【问题标题】:Split comma separated string into several rows in SSIS?在SSIS中将逗号分隔的字符串分成几行?
【发布时间】:2018-02-11 19:18:24
【问题描述】:

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

到目前为止,我尝试在出现逗号 (,) 时创建一个绕过错误的包,但这不起作用。还尝试使用检查点,也无法以这种方式实现。

【问题讨论】:

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


【解决方案1】:

第一种方法 - 您可以使用 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

参考文献


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

详细答案可以参考这个链接:

【讨论】:

    【解决方案2】:

    你可以试试这个

    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 链接。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • OP添加了ssis-2012标签,表示他使用的是sql server 2012
      猜你喜欢
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多