从XML更新记录

时间:2010-04-27 15:19:31

标签: sql mysql xml

我需要为数据库中的每个表提供4个MySQL存储过程。它们用于获取,更新,插入和删除。

“获取”,“删除”和“插入”都很简单。问题是“更新”,因为我不知道将设置哪些参数而不知道哪些参数。一些参数可以设置为NULL,而其他参数不会改变,因此不会提供它们。

由于我已经在使用XML,在谷歌进行了几次搜索后我发现可以使用一个名为UpdateXML的函数,但是这些例子太复杂了,有些文章来自2007年。所以我不知道如果此时有更好的技术或更容易的事情。

任何评论,文档,链接,文章或任何你曾经使用并且你满意的东西都将受到赞赏:D

干杯。

1 个答案:

答案 0 :(得分:1)

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