我无法查明是什么导致了您的场景中的错误。我试图根据问题重新创建场景。该示例可能会帮助您找出最终的不同之处。
创建一个名为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查询。
将结果集页面配置为接受查询返回的值并将其存储在变量中。
添加脚本任务以查看存储在变量中的值。配置脚本任务读取变量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 的行数。
希望这可以帮助您找到您的配置有什么问题。