【问题标题】:SSIS returns 0 rowsSSIS 返回 0 行
【发布时间】:2013-09-10 23:25:33
【问题描述】:

我遇到了一个我无法弄清楚的问题。我创建了一个 SSIS 包,它使用 SQL 命令从 Server2 检索数据。查询非常简单,但是,它引用连接中的视图。如果我在 Server1 上手动执行 SSIS 包,它会检索 925 行并将其插入到 Server1 中的相应表中。当我安排这个 SSIS 包每晚运行时,问题就开始了。它在第一步成功(截断 Server1 上的表以准备从 Server2 检索行),但是,当我查看表时,有 0 行。当我修改查询以删除引用视图的联接(得到不想要的结果)时,计划的 SSIS 工作得很好,尽管我得到的记录集不是我想要的,因为我需要那个 JOIN。我不明白它怎么可能是一个权限问题,因为它在没有 VIEW 的情况下可以正常工作。有什么我想念的吗?感谢您的帮助。

以下查询仅在我手动执行 SSIS 时有效:FilteredAccount is a VIEW 如果我手动运行,它应该返回 900 多行,但如果通过代理执行 SSIS,则返回 0。

SELECT B.epc_cosmid, A.consultant, A.region
FROM Consultant2TC AS A JOIN FilteredAccount AS B ON A.consultant = B.epc_serviceconsultantidname

如果我将查询更改为 SSIS 包中的以下查询并安排它,它可以正常工作:

SELECT A.consultant, A.region
FROM Consultant2TC AS A

【问题讨论】:

  • 我不是代理专家,但我会检查代理作业运行的上下文是否具有访问视图所需的权限
  • 是否有两个 FilteredAccount 对象?一个在 SQL 代理使用的帐户的默认架构中,一个在您的默认架构中?
  • 尝试更改此设置只是为了确定配置:SELECT A.consultant, A.region, @@servername as SN, db_name() as db, suser_sname() as uname FROM Consultant2TC。在一夜之间将其加载到您的表中,以绝对确定数据的来源。您还可以同时直接从视图添加负载,以查看该视图在夜间的状态。
  • @ElectricLlama 我尝试了您的建议,该作业捕获了正确的服务器名称、用户名和数据库名称,并将其插入到表中。我只是不知道发生了什么事。我已经修改了几十次作业并且它执行得很好,但是,每次我引用视图时,它都会在表中插入 0 行。用于执行作业的帐户是 sysadmin 帐户,那么,它不应该有权执行任何视图或功能(视图还包括用户功能)吗?我启用了日志记录,它没有显示任何错误,只是说“0 行已传输”。
  • 所以时间不是因素,只有当您将其作为工作运行时?您能否验证返回的用户是否与您通过 SSMS 连接的用户相同?我建议您直接从视图中将数据加载到 SSMS 中的表中,以便在作为作业运行时检查其内容。我怀疑名为FilteredAccount 的视图。你能发布定义吗?它可能会根据连接的用户过滤记录,如果该用户不同,您将得到不同的结果。

标签: sql ssis agent


【解决方案1】:

由于您从代理工作和您自己的登录中获得不同的结果,一个明显的起点是权限。 在使用代理凭据登录时从 SSMS 运行查询会得到什么结果?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    相关资源
    最近更新 更多