Sql server DTS任务中未返回行,但在调试脚本时返回
我希望我能正确地解释这一点。我有一个SSIS脚本任务,它非常简单地查询一个视图,用结果填充一个数据表,并输出结果数据表的行数Sql server DTS任务中未返回行,但在调试脚本时返回,sql-server,ssis,dts,Sql Server,Ssis,Dts,我希望我能正确地解释这一点。我有一个SSIS脚本任务,它非常简单地查询一个视图,用结果填充一个数据表,并输出结果数据表的行数 SqlCommand cmd = new SqlCommand("select .....", conn); using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { da.Fill(dt);
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";
}
在VisualStudio中,这将返回正确的结果/行数(165行)。当我保存包并将其作为SQL Server作业中的一个步骤运行时,它返回的行数为0。(作业运行时没有错误)相同的代码、相同的查询、相同的连接、相同的凭据唯一不同的是,当我在Visual Studio中点击包内的“调试”时,它可以工作,但当我作为SQL Server作业步骤执行包时,它不会工作
快把我逼疯了!有人有什么想法吗?非常感谢。我建议通过dtexec命令行工具或dtexecUI运行,看看它会产生哪些行为。这将有助于确定是包问题还是作业问题。另外,您是否在SSIS脚本任务中运行此任务?如果是这样的话,SSIS提供了一些构造,以更标准的方式(对SSIS)实现这一点。例如,您可以在数据流中使用OLEDB源,然后使用RowCount任务报告通过管道传递的RowsAffected计数 如果打开探查器,您是否看到连接已打开并执行了相同的查询?谢谢。在Profiler中,我看到批处理开始,textdata显示select查询,然后批处理完成,但没有其他内容(我很少使用Profiler)。我将文本输出到datatable行数的任意一侧,它将输出“conn open”,然后输出rowcount,然后输出“conn closed”。谢谢您的建议。命令行中的dtexec按预期工作。包不起作用的唯一地方是作为SQL作业中的一个步骤。我不知道区别是什么?执行包设置的作业步骤是如何设置的?我假设这是使用“SQLServer集成服务”的步骤类型。一种解决方法是使用SQL作业步骤类型“操作系统(CMDEXE)”。这可能会使用所需参数调用dtexec命令来执行您的包。但要执行此操作,您需要传入dtexec应用程序的完整路径。我还想说的是,我认为作业和包之间可能存在一些权限问题。因此,如果出于某种原因,您需要通过SQL Server Integration Service运行ces作业步骤类型,那么您可能需要深入研究安全模型,以确定有关包执行的更多信息。非常感谢您指出了正确的方向。当我添加代理并使用代理运行包时,它起到了作用。