gpt4 book ai didi

sql - 从 XML 更新记录

转载 作者:行者123 更新时间:2023-11-29 03:14:35 24 4
gpt4 key购买 nike

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

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

因为我已经在使用 XML,在 Google 中进行了几次搜索后,我发现可以使用一个名为 UpdateXML 的函数,但是示例太复杂,有些文章来自 2007 年。所以我不知道如果此时有更好的技术或更简单的方法。

任何评论、文档、链接、文章或任何您使用过并感到满意的东西,我们都将不胜感激 :D

干杯。

最佳答案

通常,当您在前端从数据库中的一行获取数据时,您应该拥有所有可能用于更新数据库中该行的值。您应该将所有这些值传递到您的更新中,无论它们是否实际发生了变化。否则,您的数据库并不知道它是否正在为列获取 NULL 值,因为它应该是 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 语句中删除那些您没有更新的列。只是不要太过火,并尝试为您可能想要更新的每种可能的列组合都使用一个存储过程。当您首先从表中选择时,从数据库中获取额外的列要容易得多。您最终会传回相同的值,并且您的服务器最终会使用完全相同的值更新该列,但这没什么大不了的。您可以对前端进行编码,以确保在它实际尝试更新数据库中的任何内容之前至少有一个列已更改。

关于sql - 从 XML 更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2722449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com