2010-01-25 3 views
4

Мне нужно удалить строку на основе значения в столбце при выполнении запроса на обновление. Вот код:Как использовать SQL-условные операторы

UPDATE tag SET tag_count = tag_count - 1 WHERE tag_id = 1 
IF tag_count < 1 
delete from tag where tag_id = 1 

Этот запрос здесь дает мне ошибку.

EDIT Я использую встроенный SQL с C# и SQL сервера

ответ

6

В общем, лучший вариант в таких случаях, чтобы обернуть UPDATE и DELETE заявления в рамках сделки:

BEGIN TRANSACTION; 

UPDATE tag SET tag_count = tag_count - 1 WHERE tag_id = 1 
DELETE from tag where tag_id = 1 and tag_count < 1; 

COMMIT TRANSACTION; 
+1

Хороший ответ, всегда лучше избегать процедурного подхода, когда имеется декларативный. Использовать условные обозначения и другие структуры потока управления только в качестве последней меры в хранимой процедуре. – JohnFx

+0

будет работать с встроенным sql? – Luke101

+0

@ Luke101: Да, конечно, это сработает. Поскольку вы используете C#, вы можете проверить этот короткий пример, который использует подобную транзакцию для вашей: http://www.aspnettutorials.com/tutorials/database/sql-transaction-csharp.aspx –

0

Хм, вы пытались использовать Begin и End?

UPDATE tag 
SET tag_count = tag_count - 1 
WHERE tag_id = 1 

IF tag_count < 1 
    BEGIN 
     DELETE FROM tag 
     WHERE tag_id = 1 
    END 
+0

В этом случае вам все равно нужно «SELECT tag_count FROM tag WHERE tag_id = 1' перед оператором условия. Однако это не обязательно, поскольку вы можете легко указать условие в инструкции DELETE. –

+0

sql server не распознает «tag_count» в условном выражении IF как действительный столбец, когда я пробовал этот код. – Luke101

Смежные вопросы