嗨,我正在使用 dtsx 包做一个对 SQL Server 商业智能开发工作室非常新的小项目,任何帮助都会很棒。
我有一个列名为 Number 的 Excel 文件,其中包含 int 值
我正在使用派生列转换
任何方式我都可以使用表达式来检查值是否为 int?
如果不是某种整数发送错误
谢谢你。
嗨,我正在使用 dtsx 包做一个对 SQL Server 商业智能开发工作室非常新的小项目,任何帮助都会很棒。
我有一个列名为 Number 的 Excel 文件,其中包含 int 值
我正在使用派生列转换
任何方式我都可以使用表达式来检查值是否为 int?
如果不是某种整数发送错误
谢谢你。
在 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 中的答案
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
希望这可以帮助
拉吉