Если вы не можете выполнить преобразование данных в выбранном источнике, вы можете сделать это на Script Component
в вашем DataFlow.
Перед передачей потока данных на conditional split
вы можете добавить Script Component
, как показано ниже:
![enter image description here](https://i.stack.imgur.com/ZyxKH.png)
Тогда в вашем компоненте скрипта вы должны иметь следующий код:
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, когда вы хотите читать данные из вашего источника.
Select
ISNULL(A.Field1,'') AS Field1,
ISNULL(A.Field2,'') AS Field2,
....
FROM A