如何检查列是否是整数ssis派生列转换表达式?

时间:2013-01-09 02:49:56

标签: sql-server ssis

嗨,我正在做一个对SQL服务器商业智能开发工作室很新的小项目,使用dtsx软件包,任何帮助都会很棒。

我有一个excel文件,其列名为Number,其中包含int值

我正在使用派生列转换

我可以使用表达式来检查值是否为int?

如果不是整数发送某种错误

谢谢。

2 个答案:

答案 0 :(得分:1)

在C#中我们没有IsNumeric(VB.Net)但我们可以使用TryParse来实现相同的功能

public override void Input0_ProcessInputRow(Input0Buffer Row)
{

    int result;
    if (int.TryParse(Row.Column.ToString(), out result))
    {
        Row.IsNumeric = 1;
    }
    else
    {
        Row.IsNumeric = 0;
    }

}

vb.Net中的相同代码是

 If IsNumeric(Row.Column) Then 
 Row.IsNumeric=1          // Create a `IsNumeric`  output column in script   transformation of data type int
 Else
 Row.IsNumeric=0
 End If

甚至可以使用表达式

Derived Column Transformation中实现上述功能
ISNULL((DT_I4)(Column) == (DT_I4)(Column) ? 1 : 0) ? 0 : 1

在SO

中查看我之前的answer

答案 1 :(得分:0)

SSIS表达式语言没有IsNumeric()函数,因此不能使用派生列组件来执行相同操作。您将不得不使用脚本组件。脚本组件中的以下代码将实现相同的目的。

Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain
   Inherits UserComponent

   Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
        Dim retNum As Double
        'use TryParse to test if the value is numeric or not

        If System.Double.TryParse(Row.Column, retNum) Then
            Row.DirectRowToNumeric()
        Else
            Row.DirectRowToNonNumeric()
        End If
    End Sub
End Class

希望这有帮助

拉​​吉