我需要在執行更新查詢時根據列中的值刪除一行。這裏是代碼:如何使用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
我需要在執行更新查詢時根據列中的值刪除一行。這裏是代碼:如何使用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
一般來說,在這些情況下,最好的選擇是包裹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;
嗯,你是否嘗試過使用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
在這種情況下,您仍然需要在條件語句之前'SELECT tag_count FROM tag WHERE tag_id = 1'。然而,這並不是必需的,因爲您可以在'DELETE'語句中輕鬆指定條件。 – 2010-01-25 00:59:27
當我嘗試這段代碼時,sql服務器不會將IF條件中的「tag_count」識別爲有效的列。 – Luke101 2010-01-25 01:02:33
好的答案是,當聲明式方法可用時,最好避免採用程序方法。僅在存儲過程中使用條件和其他控制流結構作爲最後的手段。 – JohnFx 2010-01-25 00:59:05
這將與內聯sql一起工作嗎? – Luke101 2010-01-25 00:59:32
@ Luke101:是的,它會工作。既然你使用的是C#,你可能想要檢查這個簡短的例子,它使用類似的事務給你:http://www.aspnettutorials.com/tutorials/database/sql-transaction-csharp.aspx – 2010-01-25 01:07:02