ssis用空字符串替换null

时间:2018-09-17 08:27:23

标签: ssis script-component

我在SSIS上使用了条件拆分,由于某些行包含NULL值,因此出现错误。我知道可以使用派生列和REPLACENULL函数来更改。但是,我的表有大约200列,执行起来非常繁琐。

我想知道使用脚本组件是否可以执行所有操作,这些组件将遍历所有行并将任何NULL更改为空字符串?

1 个答案:

答案 0 :(得分:0)

如果您无法在源代码的选择中进行数据转换,则可以在“ DataFlow”中的Script Component上进行。

在将数据流传递到conditional split之前,您可以如下图所示添加Script Component

enter image description here

然后在脚本组件中,您需要具有以下代码:

using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{

    public override void ProcessInput(int InputID, Microsoft.SqlServer.Dts.Pipeline.PipelineBuffer Buffer)
    {
        while (Buffer.NextRow())
        {
            var cols = Buffer.ColumnCount;
            //loop through each column
            for (var i = 0; i < cols; i++)
            {
                //get datatype of the column
                var type = Buffer.GetColumnInfo(i).DataType;
                //only operate on columns of type DT_STR or DT_WSTR
                if (type == DataType.DT_STR || type == DataType.DT_WSTR)
                {
                    //grab the data from the column and trim it
                    var colData = Buffer[i].ToString().Trim();
                    if (string.IsNullOrEmpty(colData))
                    {
                        //if the trimmed data is blank or null, set the output to null
                        Buffer.SetNull(i);
                    }
                    else
                    {
                        //if the column has data, set the output to the trimmed version
                        Buffer.SetString(i, colData);
                    }
                }
            }
        }
    }


}

但是,正如我所说的,并且在注释中提到的,如果可能的话,最好的方法是在要从源中读取数据时进行选择。

Select 
    ISNULL(A.Field1,'') AS Field1,
    ISNULL(A.Field2,'') AS Field2,
    ....
FROM A