gpt4 book ai didi

mysql - 更新存储过程中的不同列

转载 作者:行者123 更新时间:2023-11-29 00:25:53 24 4
gpt4 key购买 nike

我正在尝试移植我在 Java 代码中使用的概念,我已经将其用于 SQL 存储过程,但我不确定这是否可行。

基本上,如果我有一个包含 10 列的表,我希望每次都能够从同一存储过程更新不同的列组合。 IE。在 Java 中,我会传递一个包含我想要更新的值的映射并遍历它们并更新缓存中的每个键值。

这样做的好处是不必更改方法签名来包含每个列名,也不必用大量代码对每个变量进行空检查以确定是否应该更新它。我不确定这是否可行,或者某些数据库服务器是否能够做到这一点(即 PostgreSQL、Oracle、MySQL)或者它们都能够做到这一点,但我只是想不通语法。

最佳答案

在 SQL Server 中,假设有这样一个表,下面的过程将起作用:

CREATE TABLE MyBigTable(
ID INT NOT NULL PRIMARY KEY,
COLUMNA VARCHAR(100) NOT NULL,
COLUMNB VARCHAR(100) NOT NULL
)

GO

CREATE PROCEDURE UpdateMyBigTable(@ID INT, @ColumnAValue VARCHAR(100)=NULL, @ColumnBValue VARCHAR(100)=NULL)
AS BEGIN
UPDATE MyBigTable
SET COLUMNA = CASE WHEN @ColumnAValue IS NULL THEN COLUMNA ELSE @ColumnAValue END,
COLUMNB = CASE WHEN @ColumnBValue IS NULL THEN COLUMNB ELSE @ColumnBValue END
WHERE ID = @ID
AND ((COLUMNA <> @ColumnAValue AND @ColumnAValue IS NOT NULL) OR (COLUMNB <> @ColumnBValue AND @ColumnBValue IS NOT NULL));
END

GO

但是,这实际上并没有通过您所询问的字段进行枚举。如果不使用动态 SQL,这在 SQL Server 中很难做到。

关于mysql - 更新存储过程中的不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939639/

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