2010-04-27 62 views
2

我需要为数据库中的每个表提供4个MySQL存储过程。它们用于获取,更新,插入和删除。 “获取”,“删除”和“插入”很简单。问题是“更新”,因为我不知道哪些参数将被设置,哪些不是。一些参数可以设置为NULL,其他参数不会改变,因此不会提供。从XML更新记录

由于我已经在使用XML,在Google中进行了多次搜索之后,我发现可以使用名为UpdateXML的函数,但这些示例太复杂,一些文章从2007年开始。因此,我不知道现在是否有更好的技术或更容易的方法。

任何评论,文档,链接,文章或任何东西,你已经使用和你满意,将十分赞赏:d

干杯。

回答

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