当您删除一条记录在 Microsoft Dynamics CRM 的错误消息:"错误︰ 无法清除某些表删除服务"


症状


删除 Microsoft Dynamics CRM 中的记录时,应用程序日志中可能记录以下错误消息︰
事件类型: 错误
事件来源︰ MSCRMDeletionService
事件类别: 无

事件 ID: 16387
日期︰日期
时间:时间
是用户︰ 不适用

计算机︰计算机名称
说明:
错误︰ 无法清除某些表删除服务。

原因


此问题发生的原因是正在被删除的记录的实体表上的约束。此外,删除的记录的用户可能没有权限删除所有关联的记录。

例如,假定您有权限,才能删除仅联系人。您尝试删除的联系人,与三个用例相关联。在 Microsoft Dynamics CRM,contact 实体和案例实体之间的级联关系被设置为"级联删除所有。因此,该联系人记录设置为在 Microsoft Dynamics CRM 数据库中的删除状态。但是,您没有权限删除情况。因此,删除状态未设置对案例的记录。当尝试删除该联系人记录删除服务时,约束将阻止该删除操作,因为三个现有的情况下,分配给该联系人。要成功地删除该记录,您必须删除造成约束冲突的记录。

解决方案


若要解决此问题,请执行以下步骤:

注意:在按照本文中的说明进行操作之前,请确保您有一份如果出现问题,可以还原该数据库的完整备份。

若要标识的表删除服务失败的位置,请执行以下步骤︰
  1. 在 Microsoft Dynamics CRM 服务器上,单击开始单击
    运行,键入cmd,然后单击
    OK.
  2. 在命令提示符下,键入目录crmdeletionservice.exe – runonce,,然后按 enter 键。

    注意:默认情况下,Crmdeletionservice.exe 文件所在的驱动器中︰ \program files\Microsoft 动态 CRM\server\bin 目录。

    然后,您会收到与以下消息类似的消息︰
    无法清除以下各表︰ 市场活动
    注意:邮件中返回的表为表为其删除服务失败。
下面的示例演示如何解决这一问题对于市场活动表。

若要解决该问题的活动表,请执行以下步骤︰
  1. 在 SQL 查询分析器中运行一条语句。若要执行此操作,请执行以下步骤:
    1. 单击开始,指向所有程序,都指向Microsoft SQL Server,然后单击查询分析器
    2. 运行以下查询
      组织名称_MSCRM 数据库。

      注意:单位名称是实际的组织名称的占位符。
      delete from Campaign where DeletionStateCode = 2
      此查询将返回以下消息类似的消息︰
      删除冲突与列引用约束 campaign_leads 的语句。 在数据库表 LeadBase CampaignId 列单位名称_MSCRM' 中发生冲突。语句已终止。
  2. 更正的记录通过使用类似于下面的语句的语句导致的约束冲突。
    Update LeadBase set CampaignId=null WHERE CampaignId IN (SELECT CampaignId FROM CampaignBase WHERE DeletionStateCode = 2)
    注意:表和语句中使用的字段取决于您在本节前面的步骤 1b 中接收到的消息。在此示例中,您正在设置为空如果市场活动已标记为删除 LeadBase 表中的 CampaignId 字段。
  3. 运行以下命令以验证所有的表都已更正。
    crmdeletionservice.exe –runonce 
    如果您仍然遇到问题,重复步骤 1 到 3 以纠正其他限制此部分前面的。