我有一个场景,我从一个.TXT文件源生成两个.CSV文件。
所需的转换之一是:
我需要在多个字段中检查这种情况。
例如,我在源.TXT文件中包含这些字段:
col1
col2
col3
col4
col5
col6
col7
我需要检查这些字段是否包含空字符串或NULL值。
我正在使用具有以下公式的条件性拆分转换:
col1 !=""
当我尝试为文本文件中的所有列编写公式时,它对预期的一列有效,但不是预期的那样:
col1 !="" || col2 !=""...
其中一个字段中包含空值或NULL值的某些行最终会出现在错误的.CSV文件中。
感谢任何帮助!
答案 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
条件性拆分转换编辑器的屏幕截图
数据流结果的屏幕截图
希望这有帮助。
答案 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;
}
}