2014-10-17 193 views
0

如何在删除行之前检查行是否可删除?这就像开发一个新的函数CanDelete(RowID)。SQL Server - 在删除行之前如何检查一行可删除

我在另一个表中引用了这些表中的一些行。

我能做到的一种方法是捕捉异常。有没有更好的方法?

+1

从根本上说,你不能事先知道事务是否会成功。即使另一个表中没有行引用给定的行,也可以添加另一行,在您检查的时间与尝试删除的时间之间引用该行。话虽如此,您可以编写一个查询来计算另一个表中引用您想要删除的行的行数,但这不是一个可靠的解决方案(并且可能比仅处理第一个地点)。 – Cameron 2014-10-17 00:28:27

+1

将删除写为存储过程,或者使用逻辑删除触发器来删除之前检查外键。 – Crowcoder 2014-10-17 00:29:22

回答

0

假设你的要求是你不想删除一行,它是从另一个表引用。

我不会离开这个到C#代码。如果另一个应用程序的开发是通过删除或某人直接访问数据库的话。

首先你应该建立一个关于delete rule的关系。其次,您可以在删除之前编写触发器进行检查,并在其中进行汉德尔。最后,你可以写你删除语句与不存在例如

DELETE from TableA where ID in (select ID from tableA a left outer join tableB b on a.ID = b.ID where b.ID is NULL)