2013-11-15 109 views
0

我希望我能正确解释这一点。我有一个SSIS脚本任务,它非常简单地查询视图,用结果填充数据表并输出结果数据表的行数。在DTS任务中没有返回行,但在调试脚本时返回

SqlCommand cmd = new SqlCommand("select .....", conn); 
       using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
       { 
        da.Fill(dt); 
        output += "Datatable row count " + dt.Rows.Count.ToString() + " \r\n"; 
       } 

在Visual Studio中,这将返回正确的结果/ rowcount(165行)。当我保存包并将其作为SQL Server作业中的一个步骤运行时,它将返回0的行数(作业运行时没有错误)相同的代码,相同的查询,相同的连接,相同的凭据只有当我点击在Visual Studio中的“调试”包中,但是当我作为SQL Server Job步骤执行包时不会。

让我生气!任何任何想法?非常感谢。

+0

如果打开分析器,您是否看到打开的连接并执行相同的查询? – billinkc

+0

谢谢。在Profiler中,我看到批量启动和textdata显示选择查询,然后BATCH完成但没有别的(我没有使用Profiler很多)。我输出文本的数据表行数的任一侧,它输出“conn open”,然后rowcount然后“conn closed”。 – user2996958

回答

0

我建议通过dtexec命令行工具或dtexecUI来查看它产生的行为。这将有助于确定是包装问题还是工作问题。另外,你是否在SSIS脚本任务中运行它?如果是这样,SSIS提供了一些构建方法,以更标准的方式(以SSIS方式)完成此任务。例如,您可以在DataFlow中使用OLEDB源,然后使用RowCount Task报告通过管道传递的RowsAffected计数。

+0

感谢您的所有建议。命令行中的dtexec按预期工作。软件包不起作用的唯一地方是SQL作业中的一个步骤。我不知道区别是什么? – user2996958

+0

执行包的作业步骤是如何设置的?我假设这是使用“SQL Server集成服务”的步骤类型。解决方法是使用SQL作业步骤类型的“操作系统(CMDEXE)”,它可以调用带有所需参数的dtexec命令来执行你的包,但要做到这一点,你需要传入完整的路径对于dtexec应用程序 – swilliams

+0

我还想提一下,我认为在作业和包之间可能存在一些权限问题。因此,如果由于某种原因需要通过SQL Server Integration Services作业步骤类型运行,那么您可能需要深入研究进入安全模型以确定更多关于包执行的信息 – swilliams

相关问题