Обычно, когда у вас есть данные из строки в вашей базе данных в интерфейсе, вы должны иметь все значения, которые вы можете использовать для обновления этой строки в базе данных. Вы должны передать все эти значения в свое обновление, независимо от того, действительно ли они были изменены. В противном случае ваша база данных не знает, получает ли она значение 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. Просто не переходите за борт и не пытайтесь хранить хранимую процедуру для каждой возможной комбинации столбцов, которую вы можете обновить. Гораздо проще просто получить дополнительные столбцы из БД, когда вы выбираете из таблицы в первую очередь. Вы в конечном итоге передаете то же значение обратно, и ваш сервер завершит обновление столбца с тем же точным значением, но это не имеет большого значения. Вы можете запрограммировать свой интерфейс, чтобы убедиться, что хотя бы один столбец был изменен, прежде чем он попытается обновить что-либо в базе данных.