update 修改資料時,依賴或者說需要根據另一個值來進行判斷l

龙卷风吹毁停车场發表於2024-06-19

在這點我們需要使用到的sql語句

語法:

update 表名 set 某個值=case when @你要修改的值 > 表中的某一個值 then 成立之後要設定的值 else 前面沒有成立設定的值 end

舉例:

我根據傳入的年齡age來設定type為1還是0,1表示成年,0表示未成年

update Table set name=@name,type=case when @age>=18 then 1 else 0 end

明白了上面的語法之後,我們來看下面這個例子:

// ProductInventory 是實體類
//StatusId -2表示庫存為0,-1表示低於最小庫存量,1表示正常庫存量,2表示超過最大存款量
//TotalCount 資料庫當前庫存量
//MaxCount 最大庫存量標識
//MinCount 最小庫存量標識
//PorductId 就是id
//
TotalCount=TotalCount+@TotalCount 表示我增加的庫存加上資料庫剩餘的庫存
//
@TotalCount+TotalCount>MaxCount then 2 表示我傳入的(@ToalCount)+原來資料庫中剩餘的庫存(TotalCount)如果大於了設定的最大庫存標識,那就向StatusId設定為2

public bool BePutInStorage(ProductInventory productInventory)
{
    string sql = "update ProductInventory set TotalCount=TotalCount+@TotalCount,StatusId=case";
    sql += " when @TotalCount+TotalCount>MaxCount then 2";
    sql += " when @TotalCount+TotalCount>=MinCount and @TotalCount+TotalCount<=MaxCount then 1";
    sql += " when @TotalCount+TotalCount<MinCount and @TotalCount+TotalCount>0 then -1";
    sql += " else -2";
    sql += " end";
    sql += " where ProductId=@ProductId";

    SqlParameter[] sp =
    {
        new SqlParameter ("@TotalCount", productInventory.TotalCount),
        new SqlParameter ("@ProductId", productInventory.ProductId),
    };
}

相關文章