2011-04-09 110 views
1
update dbo.tblMessages 
set messageFlags = (messageFlags + 1) 
where messageId = @messageId 

这就是我的过程中的更新。我希望能够删除的记录更新后,如果messageFlags变成“10”将更新后。用if语句删除sql记录

我会怎么做呢?

回答

4

< 10条件添加到更新的WHERE。如果你想删除10时,你就说“现在是9?”

-- DECLARE @rc int 
update dbo.tblMessages 
set 
    messageFlags = (messageFlags + 1) 
where messageId = @messageId and messageId < 10 
/* 
or assign SET @rc = @@ROWCOUNT to do more stuff first 
*/ 
IF @@ROWCOUNT = 0 
    DELETE dbo.tblMessages WHERE messageId = @messageId 

或者使用UPDATE的赋值功能。类似于输出条款

DECLARE @newvalue int 

BEGIN TRANSACTIOn 

update dbo.tblMessages 
set 
    @newvalue = messageFlags = (messageFlags + 1) 
where messageId = @messageId 

IF @newvalue = 10 
    DELETE dbo.tblMessages WHERE messageId = @messageId 

COMMIT TRAN 

它归结为一个问题:你需要的价值实际上删除之前 10首?

+0

Gotcha。不,它不需要是10。最有可能的只是进行不必要的交易。谢谢! – Scott 2011-04-09 16:04:50

0

在你的进程内,你既可以把它检查的messageFlags值。如果将是10(即插入发生前),然后将其删除,或者如果您在更新后希望它发生删除它,然后(检查后)。

当值变为10时,您也可以使用更新触发器将其删除。

+0

我想,我想从触发器远离,但我会如何检查值,然后做update./ – Scott 2011-04-09 15:36:23

+0

检索使用SELECT语句该字段的当前值。然后根据这个决定你真正想要做什么。例如,如果值为9,那么您知道+ 1会使它变为10,然后您想删除它。因此,更新行以删除它是没有意义的。否则,你只需更新行,而不必担心删除它。那有意义吗? – judda 2011-04-09 15:46:47