【问题标题】:how do you check if a column is a integer ssis derived column transformation expression?你如何检查一列是否是整数 ssis 派生列转换表达式?
【发布时间】:2013-01-09 02:49:55
【问题描述】:

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

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

我正在使用派生列转换

我可以通过什么方式使用表达式来检查值是否为 int?

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

谢谢。

【问题讨论】:

    标签: sql-server ssis


    【解决方案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

    【讨论】:

    • ic 谢谢我如何向用户显示该值不是数字并停止包?
    • 您可以在上面的代码后面使用Conditional Split Transformation,并检查是否IsNumeric==1。有关更多信息,请查看本文http://sqlblog.com/blogs/andy_leonard/archive/2009/02/20/ssis-expression-language-and-the-conditional-split-transformation.aspx
    • 显示给用户?? SSIS 不是前端应用程序。用于使用 .NET 或 SSRS 显示 r u。如果您只是想在 ssis 包执行时向用户显示一条消息,则使用脚本转换并使用isNumeric==1?MessageBox.Show(Row.Column):Null。当有数字时,这将为用户创建一个弹出窗口
    【解决方案2】:

    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
    

    希望对你有帮助

    拉吉

    【讨论】:

    • 会在工作中尝试,但是他们是用 C# 来做的吗?以及如何调用脚本?
    • 使用脚本任务。对不起,我不知道 C#。可能懂 C# 的人可以评论一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2020-05-14
    • 2014-09-17
    相关资源
    最近更新 更多