update dbo.tblMessages
set messageFlags = (messageFlags + 1)
where messageId = @messageId
這就是我的過程中的更新。我希望能夠刪除的記錄更新後,如果messageFlags
變成「10」將更新後。用if語句刪除sql記錄
我會怎麼做呢?
update dbo.tblMessages
set messageFlags = (messageFlags + 1)
where messageId = @messageId
這就是我的過程中的更新。我希望能夠刪除的記錄更新後,如果messageFlags
變成「10」將更新後。用if語句刪除sql記錄
我會怎麼做呢?
將< 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首?
在你的進程內,你既可以把它檢查的messageFlags值。如果將是10(即插入發生前),然後將其刪除,或者如果您在更新後希望它發生刪除它,然後(檢查後)。
當值變爲10時,您也可以使用更新觸發器將其刪除。
您是否考慮過CASE語句? http://www.tizag.com/sqlTutorial/sqlcase.php
我不明白這是如何在手相關的問題,因爲他們要刪除的記錄就成了10後case語句不會允許他們這樣做。 – judda 2011-04-09 15:50:32
Gotcha。不,它不需要是10。最有可能的只是進行不必要的交易。謝謝! – Scott 2011-04-09 16:04:50