【发布时间】:2013-01-09 02:49:55
【问题描述】:
您好,我正在做一个对 SQL Server 商业智能开发工作室非常新的小项目,带有 dtsx 包,任何帮助都会很棒。
我有一个列名为 Number 的 Excel 文件,其中包含 int 值
我正在使用派生列转换
我可以通过什么方式使用表达式来检查值是否为 int?
如果不是某种整数发送错误
谢谢。
【问题讨论】:
标签: sql-server ssis
您好,我正在做一个对 SQL Server 商业智能开发工作室非常新的小项目,带有 dtsx 包,任何帮助都会很棒。
我有一个列名为 Number 的 Excel 文件,其中包含 int 值
我正在使用派生列转换
我可以通过什么方式使用表达式来检查值是否为 int?
如果不是某种整数发送错误
谢谢。
【问题讨论】:
标签: sql-server ssis
在 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
【讨论】:
Conditional Split Transformation,并检查是否IsNumeric==1。有关更多信息,请查看本文http://sqlblog.com/blogs/andy_leonard/archive/2009/02/20/ssis-expression-language-and-the-conditional-split-transformation.aspx
isNumeric==1?MessageBox.Show(Row.Column):Null。当有数字时,这将为用户创建一个弹出窗口
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
希望对你有帮助
拉吉
【讨论】: