2010-01-25 94 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 

此查詢在這裏給我一個錯誤。

編輯 我使用內聯SQL與C#和SQL Server

回答

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 2010-01-25 00:59:05

+0

這將與內聯sql一起工作嗎? – Luke101 2010-01-25 00:59:32

+0

@ Luke101:是的,它會工作。既然你使用的是C#,你可能想要檢查這個簡短的例子,它使用類似的事務給你:http://www.aspnettutorials.com/tutorials/database/sql-transaction-csharp.aspx – 2010-01-25 01:07:02

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'語句中輕鬆指定條件。 – 2010-01-25 00:59:27

+0

當我嘗試這段代碼時,sql服務器不會將IF條件中的「tag_count」識別爲有效的列。 – Luke101 2010-01-25 01:02:33