通常,當您在前端的數據庫中有一行數據時,應該有用於更新數據庫中該行的所有值。您應該將所有這些值傳遞到您的更新中,而不管它們是否實際更改。否則,你的數據庫並不真正知道它是否獲得了一個列的NULL值,因爲這就是它應該是的,或者因爲你只是沒有傳遞真正的值。
如果您要在應用程序的某些區域不需要表中的某些列,那麼可以設置不使用這些列的其他存儲過程。在填充前端對象時,從數據庫中檢索所有列通常更容易。額外列的開銷通常很小,值得保存多個更新存儲過程的維護。
下面是一個例子。這是MS SQL Server語法,所以你可能需要稍微改變它,但希望它描述了一個思路:
CREATE PROCEDURE Update_My_Table
@my_table_id INT,
@name VARCHAR(40),
@description VARCHAR(500),
@some_other_col INT
AS
BEGIN
UPDATE
My_Table
SET
name = @name,
description = @description,
some_other_col = @some_other_col
WHERE
my_table_id = @my_table_id
END
CREATE PROCEDURE Update_My_Table_Limited
@my_table_id INT,
@name VARCHAR(40),
@description VARCHAR(500)
AS
BEGIN
UPDATE
My_Table
SET
name = @name,
description = @description
WHERE
my_table_id = @my_table_id
END
正如你所看到的,只是消除,你不更新這些列來自UPDATE語句。只是不要過分,並嘗試爲每個可能需要更新的列組合使用存儲過程。從表中選擇時,從數據庫中獲取額外的列要容易得多。您最終會傳回相同的值,並且您的服務器將以相同的確切值更新列,但這沒什麼大不了的。您可以對您的前端進行編碼,以確保在實際嘗試更新數據庫中的任何內容之前至少有一列已更改。