【问题标题】:No rows returned in DTS task, but returned when debugging scriptDTS任务中没有返回行,但在调试脚本时返回
【发布时间】:2013-11-15 16:16:24
【问题描述】:

我希望我能正确解释这一点。我有一个 SSIS 脚本任务,它非常简单地查询视图,用结果填充数据表并输出结果数据表具有的行数。

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 中,这会返回正确的结果/行数(165 行)。当我保存包并将其作为 SQL Server 作业中的一个步骤运行时,它返回的行数为 0。(作业运行时没有错误)相同的代码、相同的查询、相同的连接、相同的凭据唯一的区别是它在我点击时起作用在 Visual Studio 的包中“调试”,但当我将包作为 SQL Server 作业步骤执行时不会。

把我逼疯了!有人有什么想法吗?非常感谢。

【问题讨论】:

  • 如果您打开分析器,您是否看到打开的连接并执行了相同的查询?
  • 谢谢。在 Profiler 中,我看到 Batch Starting 和 textdata 显示选择查询,然后 BATCH Completed 但没有其他内容(我没有使用 Profiler 太多)。我在数据表行数的任一侧输出文本,它输出“conn open”,然后是 rowcount,然后是“conn closed”。

标签: sql-server ssis dts


【解决方案1】:

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

【讨论】:

  • 感谢您的所有建议。命令行中的 dtexec 按预期工作。包不起作用的唯一地方是 SQL 作业中的一个步骤。不知道有什么区别?
  • 执行包的作业步骤是如何设置的?我假设这是使用“SQL Server Integration Services”的步骤类型。一种解决方法是使用“操作系统 (CMDEXE) 的 SQL 作业步骤类型。这可以使用所需参数调用 dtexec 命令来执行您的包。不过,要执行此操作,您需要传入完整路径对于 dtexec 应用程序
  • 我还想提一下,我认为作业和包之间可能存在一些权限问题。因此,如果由于某种原因您需要通过 SQL Server Integration Services 作业步骤类型运行,那么您可能需要深入研究安全模型以确定有关包执行的更多信息。
  • 非常感谢您指出正确的方向。当我添加代理并使用代理运行包时,它起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多