0

我有一个使用这个表达式的执行 SQL 任务:

@[User::SQLExportError] + (DT_WSTR,30)@[User::Id]

表达式正确计算为:

  select count(*) as ErrorTableCount from [myschema].Error 
    where SPName in ('export/INSERT','export/DELETE') and Id = 1000

在同一个 sql 任务中,我想将ResultName 捕获as ErrorTableCount到一个单行结果集中:ErrorTableCount变量名称称为:User::ErrorTableCount

我得到红色圆圈/x 十字告诉我:

There were errors during task validation.

使用 sql 源的表达式和包含在结果集下定义的配音计数名称的表达式之间似乎存在一些冲突。有什么建议/想法吗?

4

1 回答 1

7

我无法查明是什么导致了您的场景中的错误。我试图根据问题重新创建场景。该示例可能会帮助您找出最终的不同之处。

创建一个名为dbo.Error的简单表

CREATE TABLE [dbo].[Error](
    [Id] [int] NOT NULL,
    [SPName] [varchar](20) NOT NULL
) ON [PRIMARY]
GO

使用以下脚本使用一些示例数据填充表。

INSERT INTO dbo.Error (Id, SPName) VALUES 
    (1000, 'export/INSERT'),
    (1000, 'export/DELETE'),
    (1001, 'export/INSERT');
GO

在 SSIS 包上,创建连接管理器或数据源以连接到托管上述表的数据库。在此示例中,我创建了一个 OLE DB 连接管理器,因为它是 SQL Server 数据库的推荐提供程序,并将连接管理器命名为 Practice。

在包上创建以下变量。

变量

将变量设置Id为值 1000,以便我们将在执行 SQL 任务中执行的查询将获取至少两行。

将变量设置SQLExportError为以下查询:

SELECT COUNT(Id) AS ErrorTableCount FROM dbo.Error WHERE SPName in ('export/INSERT','export/DELETE') AND Id =

选择变量SQLFetch并按 F4 查看属性。将属性EvaluateAsExpression设置为True单击Expression属性上的 Ellipsis 按钮并设置以下表达式。

@[User::SQLExportError] + (DT_WSTR,30)@[User::Id]

表达

将执行 SQL 任务拖放到控制流选项卡上。如下图配置Execute SQL任务的General页面,执行存储在表达式变量中的SQL查询。

执行 SQL 任务 - 常规

将结果集页面配置为接受查询返回的值并将其存储在变量中。

执行 SQL 任务 - 结果集

添加脚本任务以查看存储在变量中的值。配置脚本任务读取变量ErrorTableCount

脚本任务

将以下 C# 代码添加到脚本任务。

public void Main()
{
    MessageBox.Show(String.Format("Value in variable ErrorTableCount: {0}", 
        Dts.Variables["User::ErrorTableCount"].Value), 
        "Execute SQL Task - Single Row");
    Dts.TaskResult = (int)ScriptResults.Success;
} =

脚本任务代码

关闭脚本任务编辑器。控制流看起来像这样。

控制流

执行包时,消息框应显示计数2,因为这是示例数据中 Id 设置为值 1000 的行数。

希望这可以帮助您找到您的配置有什么问题。

包执行

于 2012-10-31T22:26:59.163 回答