1

我有一个存储过程,可以在 CRM2011 SQL Server 上简单地运行一系列 UPDATE 语句。目标是让它通过 SQL Server 代理作业每 30 分钟运行一次。存储过程不需要任何参数。

我创建了作业并添加了一个步骤来调用 T-SQL 语句“EXEC mystoredprocname”。我右键单击并“在此步骤开始作业”,它成功完成。但是,没有任何更新反映在数据库中。

如果我在查询行中手动运行“EXEC mystoredprocname”,它会正常执行并且数据库会按预期更新。

这看起来应该非常简单,所以我不确定我的过程中的故障在哪里。

4

1 回答 1

1

正如您在评论中提到的您的存储过程使用过滤视图,我相当愿意打赌您没有作为通过 Windows 身份验证进行身份验证并且还具有正确 CRM 权限的用户运行计划,因为经常已经注意到,过滤视图实现了 CRM 的基于 Windows 的身份验证模型。

所以我有三个建议:

  1. 仔细检查以确保计划在具有正确读取权限的 CRM 用户的 Windows 帐户下运行。

  2. 由于您致力于直接更新表,因此您想要使用过滤视图的唯一原因是因为它OptionSet为您打包了 s 的字符串表示形式的检索。相反,您可以直接查询StringMap表并引用常规视图,您无需成为 CRM 用户即可访问这些视图。您还会注意到速度有所提高,因为过滤视图会因安全检查而减慢。

  3. 如果您打算直接更新表,为什么不将您的存储过程重写为一个您可以安排每 30 分钟更新一次的小应用程序呢?除非您有一个巨大的增量,否则这应该是首选方法。您获得了 CRM Web 服务中内置验证模型的优势,尽管您失去了基于集合的方法的好处,但我认为使用第三方系统的好处超过了潜在的黑客攻击和破坏的坏处在系统中。如果您不是 .NET 开发人员(即使您是),CRM SDK 有许多示例可以帮助您入门。

以下是与我上述观点相关的其他一些问题,可能会对您有所帮助。

于 2012-12-19T20:08:39.403 回答