用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
+0
我不明白这是如何在手相关的问题,因为他们要删除的记录就成了10后case语句不会允许他们这样做。 – judda 2011-04-09 15:50:32
Gotcha。不,它不需要是10。最有可能的只是进行不必要的交易。谢谢! – Scott 2011-04-09 16:04:50