2009-06-06 36 views
3

在从表中删除行之前,是否有任何简单的方法检查它是否会违反参照完整性规则?我想从C#赢表单应用程序做到这一点(.NET 3.5)使用SQL Server 2005在删除之前检查参照完整性规则违规

+0

我不知道有任何这样的技术,但如果有这样的技术存在,我想你用来访问数据库的特定技术将是一个非常基本的信息。 – 2009-06-06 18:23:21

回答

1

有浮现在脑海中的几个可能的选择:

  • 设置级联在数据库中删除,以便删除将始终成功。
  • 删除前使用SELECT检查相关记录。这要求应用程序知道约束条件。
  • 一个好的域模型(业务类)应该允许应用程序知道相关记录。
  • 一个O/R映射器,比如NHibernate,可以用来定义级联删除操作。
  • 使用SMO(Microsoft.SqlServer.Smo)检查数据库模式的关系,然后检查现有的相关记录。我不知道这是否可能。
1

你可能会做一个事务中的删除:

try 
{ 
    begin transaction 
    delete row 
} 
catch SQLException 
{ 
    if SQL error indicates referential integrity violation 
    throw ReferentialIntegrityViolationException 
} 
finally 
{ 
    rollback transaction 
} 

(假设你永远都不想删除发生在你的代码这一点)

+0

我认为这个想法是确定一个规则是否被违反,而没有实际执行删除的性能成本。此解决方案具有所有性能问题并且没有任何好处;) – 2009-06-06 18:30:59

相关问题