#tsql
#tsql
Вопрос:
update dbo.tblMessages
set messageFlags = (messageFlags 1)
where messageId = @messageId
Итак, это обновление в моей процедуре. Я хочу иметь возможность удалять запись после обновления, если messageFlags
после ее обновления становится ’10’.
Как бы мне это сделать?
Ответ №1:
Добавьте < 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
Или используйте функцию назначения ОБНОВЛЕНИЯ. Аналогично предложению 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. Понял. и нет, это еще не обязательно должно быть 10. скорее всего, это было бы просто выполнением ненужной транзакции. Спасибо!
Ответ №2:
В вашей процедуре вы могли бы либо проверить значение messageFlags. Если она будет равна 10 (т. Е. до того, как произойдет вставка), то удалите ее или, если вы хотите, чтобы это произошло после обновления, удалите ее (после проверки).
Вы также можете использовать триггер обновления, чтобы удалить ее, когда значение становится 10.
Комментарии:
1. Я думаю, что хочу держаться подальше от триггеров, но как бы мне проверить значение, а затем выполнить обновление./
2. Извлеките текущее значение для этого поля с помощью инструкции SELECT. А затем на основе этого решите, что вы на самом деле хотите сделать. Например, если значение равно 9, то вы знаете, что 1 приведет к переходу к 10, после чего вы захотите его удалить. Поэтому нет смысла обновлять строку только для того, чтобы удалить ее. В противном случае вы бы просто обновили строку и не беспокоились о ее удалении. Имеет ли это смысл?
Ответ №3:
рассматривали ли вы инструкцию CASE? http://www.tizag.com/sqlTutorial/sqlcase.php
Комментарии:
1. Я не понимаю, как это связано с рассматриваемым вопросом, потому что они хотят удалить запись после того, как она станет 10. Инструкция case не позволила бы им сделать это.