我需要为数据库中的每个表提供4个MySQL存储过程。它们用于获取,更新,插入和删除。
“获取”,“删除”和“插入”都很简单。问题是“更新”,因为我不知道将设置哪些参数而不知道哪些参数。一些参数可以设置为NULL,而其他参数不会改变,因此不会提供它们。
由于我已经在使用XML,在谷歌进行了几次搜索后我发现可以使用一个名为UpdateXML的函数,但是这些例子太复杂了,有些文章来自2007年。所以我不知道如果此时有更好的技术或更容易的事情。
任何评论,文档,链接,文章或任何你曾经使用并且你满意的东西都将受到赞赏:D
干杯。
答案 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中获取额外的列要容易得多。您将最终传回相同的值,您的服务器将最终使用相同的确切值更新列,但这不是什么大问题。您可以对前端进行编码,以确保在实际尝试更新数据库中的任何内容之前至少有一列已更改。