通常,当您在前端的数据库中有一行数据时,应该有用于更新数据库中该行的所有值。您应该将所有这些值传递到您的更新中,而不管它们是否实际更改。否则,你的数据库并不真正知道它是否获得了一个列的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语句。只是不要过分,并尝试为每个可能需要更新的列组合使用存储过程。从表中选择时,从数据库中获取额外的列要容易得多。您最终会传回相同的值,并且您的服务器将以相同的确切值更新列,但这没什么大不了的。您可以对您的前端进行编码,以确保在实际尝试更新数据库中的任何内容之前至少有一列已更改。