您的问题是有一个空的数据列,并且您没有尝试在连接中测试或处理它。
如果您知道一行中只有一个空列,则以下表达式将更正它。它只是在结果字符串中添加一个REPLACE 调用,以使双管道变成单管道。
(DT_STR,50,1252)REPLACE(([Column 1] + "|" + [Column 2] + "|" + [Column 3] + "|" + [Column 4]),"||","|")
否则,您将需要检查列是否有值,然后才添加分隔符。这将导致如下表达式
(DT_STR,50,1252)(([Column 1] + ((LEN([Column 1]) == 0) ? "" : "|") + [Column 2] + ((LEN([Column 2]) == 0) ? "" : "|") + [Column 3] + ((LEN([Column 3]) == 0) ? "" : "|") + [Column 4]))
给定以下示例数据
SELECT
'A' AS [Column 1]
, 'B' AS [Column 2]
, '' AS [Column 3]
, 'D' AS [Column 4]
UNION ALL
SELECT
'A' AS [Column 1]
, '' AS [Column 2]
, '' AS [Column 3]
, 'D' AS [Column 4]
UNION ALL
SELECT
'A' AS [Column 1]
, '' AS [Column 2]
, '' AS [Column 3]
, '' AS [Column 4]
UNION ALL
SELECT
'' AS [Column 1]
, '' AS [Column 2]
, '' AS [Column 3]
, 'D' AS [Column 4];
生成了以下结果
此时,我可能会跳过派生列并使用脚本组件来生成连接数据。表达式的滚动是维护挑战。另外,上述脚本不考虑 NULL。