使用if语句删除sql记录

时间:2011-04-09 15:25:26

标签: tsql

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

这就是我的proc中的更新。我希望能够在更新后删除记录,IF messageFlags在更新后变为“10”。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

< 10条件添加到UPDATE的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的assign功能。与OUTPUT子句类似

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的值?

答案 1 :(得分:0)

在你的proc中,你可以让它检查messageFlags值。如果它将是10(即在插入发生之前)然后删除它,或者如果你想要它在更新发生后删除它(在检查之后)。

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

答案 2 :(得分:-1)

你考虑过CASE声明吗? http://www.tizag.com/sqlTutorial/sqlcase.php