对多个空字符串使用条件拆分

时间:2014-01-13 15:58:55

标签: ssis

我有一个场景,我从一个.TXT文件源生成两个.CSV文件。

所需的转换之一是:

  • 标识包含至少一个空字符串或NULL值的字段的记录
  • 将这些记录发送到单独的.CSV文件目的地

我需要在多个字段中检查这种情况。

例如,我在源.TXT文件中包含这些字段:

col1
col2
col3
col4
col5
col6 
col7 

我需要检查这些字段是否包含空字符串或NULL值。

我正在使用具有以下公式的条件性拆分转换:

col1 !="" 

当我尝试为文本文件中的所有列编写公式时,它对预期的一列有效,但不是预期的那样:

col1 !="" || col2 !=""...

其中一个字段中包含空值或NULL值的某些行最终会出现在错误的.CSV文件中。

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,我认为您只需要在条件性拆分转换中使用以下公式:

ISNULL(col1) || ISNULL(col2) || ISNULL(col3) || ISNULL(col4) || ISNULL(col5) || ISNULL(col6) || ISNULL(col7) || TRIM(col1) == "" || TRIM(col2) == "" || TRIM(col3) == "" || TRIM(col4) == "" || TRIM(col5) == "" || TRIM(col6) == "" || TRIM(col7) == ""

空字符串和NULL之间存在差异,但由于您的源是.TXT文件,因此如果您的源是数据库表,这可能不会那么明显。

Here is the SQL Fiddle for the sample data

条件性拆分转换编辑器的屏幕截图

Screenshot of the Conditional Split Transformation Editor

数据流结果的屏幕截图

Screenshot of the Data Flow results

希望这有帮助。

答案 1 :(得分:0)

我想出来了。在条件拆分之前使用的脚本组件来标记行。

代码:

/* Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
/**string RecordID = "";
string ClientRequestID = "";
string AccountID = "";
string ClientMemberID = "";
string MemberDOB = "";
string ProviderPhone = "";**/
string Flag = "True";

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (Row.ClientRequestID == "" || Row.ClientMemberID == "" || Row.AccountID == "" || Row.MemberDOB == "" || Row.ProviderPhone == "")
    {

        Flag = "False";
    }
    else
    {
        Flag = "True";
    }
    Row.Flag = Flag;
}         

}

enter image description here

enter image description here