SSIS将不可转换的nvarchar替换为0

本文关键字:替换 nvarchar 可转换 SSIS | 更新日期: 2023-09-27 18:27:31

我正在处理一个SSIS作业,该作业将数据从登录表转移到暂存表。同时,我想执行一些DQ检查,包括将列从类型nvarchar转换为float的检查。没问题,只是肯定会有不可转换的字符串(着陆表的原始来源是一个excel文件,用户可以在其中输入他们想要的任何内容)。我想用0替换不可转换的字符串。我对c#和SSIS非常非常陌生。

SSIS将不可转换的nvarchar替换为0

如果您在Data Flow中,您也许可以使用数据转换。可能,您还可以使用DB Command手动将nvarchar转换为带有sql任务的float,类似于以下内容:

SELECT (case when ISNUMERIC(@input) = 1 then CAST(@input as float) else 0 end)

示例:

declare @input nvarchar(50);
set @input = '502';
SELECT (case when ISNUMERIC(@input) = 1 then CAST(@input as float) else 0 end) as [Result]

502 中的结果

set @input = '502aaa';
SELECT (case when ISNUMERIC(@input) = 1 then CAST(@input as float) else 0 end) as [Result]

0 中的结果

如果您已经将数据从登录表读取到脚本作业内部的变量中,则可以使用TryParse,如下所示:

//Perhaps you are going through each row here and have a reference to the value in the questionable Field:
var questionableField = "113Typo";
float convertedValue;
if(float.TryParse(questionableField, out convertedValue))
{
    //Insert convertedValue into staging table
}
else
{
    //Insert 0 instead
}

如果您传递的内容不能转换为该类型,TryParse将返回false。否则,它将使用out容器(在本例中为convertedValue)来存储转换后的值,然后返回true。