2011-04-09 196 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