Sql server 2008 如何在ssis脚本任务中显示变量

Sql server 2008 如何在ssis脚本任务中显示变量,sql-server-2008,ssis,ssis-2012,Sql Server 2008,Ssis,Ssis 2012,我有一个“执行SQL任务”,它生成一个行计数。见屏幕1 我正在尝试在ssis“脚本任务”中打印“ContactRowCount”。见屏幕2 但是Dts.Variables[“User::ContactRowCount”]为空。我可以找回它。 任何人都知道如何从脚本任务中的“执行SQL任务”中检索变量值 屏幕-1 屏幕-2 请阅读文档,所有这些都已涵盖 变量 我有两个变量。一个用于我的SQL,称为qquery,这是可选的。另一个是名为RowCount的Int32 执行SQL任务 我有一个使用O

我有一个“执行SQL任务”,它生成一个行计数。见屏幕1

我正在尝试在ssis“脚本任务”中打印“ContactRowCount”。见屏幕2

但是Dts.Variables[“User::ContactRowCount”]为空。我可以找回它。 任何人都知道如何从脚本任务中的“执行SQL任务”中检索变量值

屏幕-1

屏幕-2


请阅读文档,所有这些都已涵盖

变量 我有两个变量。一个用于我的SQL,称为
qquery
,这是可选的。另一个是名为
RowCount
的Int32

执行SQL任务 我有一个使用OLEDB连接管理器的执行SQL任务。我已将其指定为单行的
结果集。我使用我的
Query
变量作为源

价值是

SELECT COUNT(1) AS ContactRowCount FROM sys.columns AS SC;
在结果集选项卡中,我将
0
ResultSet映射到我的变量
User::RowCount

如果您使用的是不同的连接管理器提供程序(ADO.NET或ODBC),那么这些语义都会更改。但这是有记录的

脚本任务 我确保将变量作为只读对象传入

在我的脚本中,我需要访问该变量。这是区分大小写的。此外,我需要
.Value
属性。如果您的代码能够工作,它将把SSIS变量转换为字符串。这将导致默认对象发出其名称
Microsoft.SqlServer.Dts.Runtime.Variable

相反,我们希望访问作为对象返回的.Value属性。如果你想用这个值做一些数学运算,那么你需要把它转换成一个整数值,但是因为我们要用字符串,这很容易

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_454527867e9d448aad6a7f03563175b2.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {

        #region VSTA generated code
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

        public void Main()
        {
            string strMessage = Dts.Variables["User::RowCount"].Value.ToString();
            MessageBox.Show(strMessage);
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
}

请阅读文档,所有这些都已涵盖

变量 我有两个变量。一个用于我的SQL,称为
qquery
,这是可选的。另一个是名为
RowCount
的Int32

执行SQL任务 我有一个使用OLEDB连接管理器的执行SQL任务。我已将其指定为单行的
结果集。我使用我的
Query
变量作为源

价值是

SELECT COUNT(1) AS ContactRowCount FROM sys.columns AS SC;
在结果集选项卡中,我将
0
ResultSet映射到我的变量
User::RowCount

如果您使用的是不同的连接管理器提供程序(ADO.NET或ODBC),那么这些语义都会更改。但这是有记录的

脚本任务 我确保将变量作为只读对象传入

在我的脚本中,我需要访问该变量。这是区分大小写的。此外,我需要
.Value
属性。如果您的代码能够工作,它将把SSIS变量转换为字符串。这将导致默认对象发出其名称
Microsoft.SqlServer.Dts.Runtime.Variable

相反,我们希望访问作为对象返回的.Value属性。如果你想用这个值做一些数学运算,那么你需要把它转换成一个整数值,但是因为我们要用字符串,这很容易

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_454527867e9d448aad6a7f03563175b2.csproj
{
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {

        #region VSTA generated code
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

        public void Main()
        {
            string strMessage = Dts.Variables["User::RowCount"].Value.ToString();
            MessageBox.Show(strMessage);
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }
}

在脚本任务中使用变量名称,而不是结果集名称。

在脚本任务中使用变量名称,而不是结果集名称。

执行SQL任务中的SQL是什么?你在运行整个程序包吗?(SQL然后脚本任务)?根据屏幕截图,变量名似乎是User::RowCount,而不是User::ContactRowCount。执行SQL任务中的SQL是什么?你在运行整个程序包吗?(SQL然后脚本任务)?根据您的屏幕截图,您的变量名似乎是User::RowCount,而不是User::ContactRowCount。上述答案是正确的,我在学习SSIS时也犯了同样的错误。要解决此问题,屏幕2中的代码行应为:String strMessage=Dts.Variables[“User::RowCount”].ToString();ContactRowCount不存在于屏幕1中显示的SQL任务范围之外。上面的答案是正确的,我在学习SSI时也犯了同样的错误。要解决此问题,屏幕2中的代码行应为:String strMessage=Dts.Variables[“User::RowCount”].ToString();ContactRowCount不存在于屏幕1中显示的SQL任务范围之外。