我在SSIS上使用了条件拆分,由于某些行包含NULL值,因此出现错误。我知道可以使用派生列和REPLACENULL函数来更改。但是,我的表有大约200列,执行起来非常繁琐。
我想知道使用脚本组件是否可以执行所有操作,这些组件将遍历所有行并将任何NULL更改为空字符串?
答案 0 :(得分:0)
如果您无法在源代码的选择中进行数据转换,则可以在“ DataFlow”中的Script Component
上进行。
在将数据流传递到conditional split
之前,您可以如下图所示添加Script Component
:
然后在脚本组件中,您需要具有以下代码:
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