2

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

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

我正在使用派生列转换

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

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

谢谢你。

4

2 回答 2

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 中的答案

于 2013-01-09T06:41:16.600 回答
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

希望这可以帮助

拉吉

于 2013-01-09T03:12:16.477 回答