Обновление записей из XML - PullRequest
2 голосов
/ 27 апреля 2010

Мне нужно предоставить 4 хранимых процедуры MySQL для каждой таблицы в базе данных. Они предназначены для получения, обновления, вставки и удаления.

«Получить», «удалить» и «вставить» просты. Проблема в «обновлении», потому что я не знаю, какие параметры будут установлены, а какие нет. Некоторые параметры могут быть установлены в NULL, а другие просто не изменятся, поэтому они не будут предоставлены.

Поскольку я уже работаю с XML, после нескольких поисков в Google я обнаружил, что можно использовать функцию UpdateXML, но примеры слишком сложные, а некоторые статьи относятся к 2007 году. если в этот момент есть лучшая техника или что-то более легкое.

Любой комментарий, документация, ссылка, статья или что-то из того, что вы использовали, и вы довольны, будут оценены по достоинству: D

Приветствие.

1 Ответ

1 голос
/ 02 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...