我使用以下表达式执行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任务中,我想将 as ErrorTableCount
捕获到一个结果集中,结果名为: ErrorTableCount 变量名称为:{{ 1}}
我正在接受红色圆圈/ x十字架告诉我:
User::ErrorTableCount
在使用sql源表达式和包含结果集下定义的复制计数名称的表达式之间似乎存在一些冲突。有什么建议/想法吗?
答案 0 :(得分:6)
我无法确定您的方案中导致错误的原因。我试图根据问题重新创建场景。该示例可能会帮助您找出最终结果的不同之处。
创建一个名为 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在( '出口/ INSERT', '导出/删除')和Id =
选择变量SQLFetch
,然后按F4查看属性。将属性 EvaluateAsExpression 设置为 True 。单击 Expression 属性的省略号按钮,然后设置以下表达式。
@[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中。
希望能帮助您找到配置的错误。