2011-07-10 25 views
1

当删除某个表中的行时,我想只允许删除如果至少引用了2个特定的列。SQL Server:在删除之前需要多个条件

例如:

Delete From TransTable 
/* delete fails - need where condition*/ 

Delete From Transtable 
WHERE TransID = @TransID AND UserID = @UserID 
/* rows deleted */ 

我这样做的理由是安全的第二层添加到删除过程。这可能吗?

回答

3

如果@TransID或@UserID为NULL,则将删除零行。所有与null无关的比较评估为假(严格未知,对于不可避免的琐事,但实际上在这里是错误的)。

但是,对于更复杂的逻辑,如抛出错误,请使用具有2个必需参数和一些逻辑的存储过程。 (编辑:我会这样做)

没有办法强制执行2条件,除非你的代码限制如上。没有人应该能够直接用SQL工具或类似的方式删除,或绕过你的支票。正确。

+1

正确。通过存储过程控制数据访问,然后您可以轻松*要求*提供这些参数,并且还可以为它们的值规定有效域。如果您允许从表格中进行临时删除,祝您好运! –

+0

谢谢gbn和Aaron。 *我*从表中进行临时删除,但也许我不能信任事件!通过存储的proc完全删除很有意义。我希望有一种方法可以在桌子上放置一条“规则”。 – IMAbev