Sql server 使SQL Server仅对插入或更新的行使用检查约束

Sql server 使SQL Server仅对插入或更新的行使用检查约束,sql-server,stored-procedures,check-constraints,Sql Server,Stored Procedures,Check Constraints,我希望将业务规则应用于表中的行(SQLServer2008)。但是,表中存在不符合此规则的历史数据,并且没有使其符合的好方法(未知值没有合理的默认值)。因此,我希望仅在新插入的行上或在更新行时检查CHECK约束 我创建了这样一个约束,并设置了以下值: 在创建或重新启用时检查现有数据:否 强制执行插入和更新:是 强制执行复制:是 当我插入一张新唱片时,一切似乎都很好。但是,如果更新记录,即使更新的记录符合检查约束,检查约束也会失败。这就好像它试图在更新一行时将约束应用于所有行一样。我怎样才能防

我希望将业务规则应用于表中的行(SQLServer2008)。但是,表中存在不符合此规则的历史数据,并且没有使其符合的好方法(未知值没有合理的默认值)。因此,我希望仅在新插入的行上或在更新行时检查CHECK约束

我创建了这样一个约束,并设置了以下值:

  • 在创建或重新启用时检查现有数据:否
  • 强制执行插入和更新:是
  • 强制执行复制:是
当我插入一张新唱片时,一切似乎都很好。但是,如果更新记录,即使更新的记录符合检查约束,检查约束也会失败。这就好像它试图在更新一行时将约束应用于所有行一样。我怎样才能防止这种情况

以下是限制条件:

([DateGiven] IS NULL 
 AND [PrimaryConsultantId] IS NULL 
 AND [AdditionalConsultants] IS NULL 
 AND [ResultingClaLevel] IS NULL)
OR ([DateGiven] IS NOT NULL 
 AND [PrimaryConsultantId] IS NOT NULL 
 AND [AdditionalConsultants] IS NOT NULL 
 AND [ResultingClaLevel] IS NOT NULL))
更新是通过存储的过程完成的:(claeluationId是主键)


程序中的以下行是错误的:

,[PrimaryConsultantId] = PrimaryConsultantId
应该是

,[PrimaryConsultantId] = @PrimaryConsultantId

您的约束按预期工作,并为您暴露了一个bug。

您正在做的事情应该按您的意愿工作。它不应该检查未受影响行上的约束。谢谢!我知道一定是那种愚蠢的事情。我多次查看该过程,但忽略了缺少的“@”。
,[PrimaryConsultantId] = @PrimaryConsultantId