首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SSIS 數據流:將單行數值拆分為多行的存儲過程方案

     編輯:程式設計綜合問答

需求場景

源表 A 查詢出單行:ID=1001, str=3。需拆分為目標表 B 三行:(1001,1), (1001,1), (1001,1)。

推薦方案:T-SQL 存儲過程 + SSIS 執行 SQL 任務

CREATE PROC dbo.SplitValueToRows
    @SourceTable NVARCHAR(128),
    @TargetTable NVARCHAR(128)
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL NVARCHAR(MAX);
    -- 使用遞歸 CTE 生成數字序列 1..str
    SET @SQL = N'
    WITH nums AS (
        SELECT 1 AS n
        UNION ALL
        SELECT n+1 FROM nums WHERE n < (SELECT MAX(str) FROM ' + QUOTENAME(@SourceTable) + N')
    )
    INSERT INTO ' + QUOTENAME(@TargetTable) + N' (ID, str)
    SELECT s.ID, 1
    FROM ' + QUOTENAME(@SourceTable) + N' s
    JOIN nums n ON n.n <= s.str
    OPTION (MAXRECURSION 0);';
    EXEC sp_executesql @SQL;
END

SSIS 封裝設計

  1. 數據流任務:源 OLE DB Source → 目標 OLE DB Destination(若直接可行)。
  2. 或 **執行 SQL 任務** 調用上述存儲過程,參數化表名。
  3. 配置事務選項確保原子性。

替代純 SSIS 方案(無存儲過程)

  • 源 → **腳本組件 (Script Component, 同步輸出)**:C# 循環輸出 str 次行。
  • 源 → **多播** → **行計數** → **條件分割** 等組合(極其繁瑣,不推薦)。

存儲過程方案性能最優、邏輯集中、易維護,是 ETL 拆分行的標準做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved