C# 如何在oracle中使用不同的where条件更新多行
我在c#中有一个int和string列表,其中int是主键,string是name 例如:{1,2},{“fist”,“second”} 我需要使用以下过程更新oracle中的值 假设我有如下过程,其中list作为数组传递给varchar 过程更新名称C# 如何在oracle中使用不同的where条件更新多行,c#,oracle,oracle-sqldeveloper,C#,Oracle,Oracle Sqldeveloper,我在c#中有一个int和string列表,其中int是主键,string是name 例如:{1,2},{“fist”,“second”} 我需要使用以下过程更新oracle中的值 假设我有如下过程,其中list作为数组传递给varchar 过程更新名称 ( VARCHAR中的id, VARCHAR中的名称 ) 是 开始 结束updatename 在不使用case语句的情况下,我应该暗示的逻辑是什么呢?好的,那么也许您有一个表(其名称最好不是“table”!)-假设它被称为tbl,至少有两列,id
(
VARCHAR中的id,
VARCHAR中的名称
)
是 开始
结束updatename
在不使用case语句的情况下,我应该暗示的逻辑是什么呢?好的,那么也许您有一个表(其名称最好不是“table”!)-假设它被称为tbl,至少有两列,id和name。您有一个字典,其中包含列id和名称(或任何其他列名) 然后-使用
merge
语句:
merge into tbl
using dictionary
on (tbl.id = dictionary.id)
when matched then
update set name = dictionary.name
;
您也可以使用
update
语句,但当更新从另一个表读取时,merge
更易于读取和维护,有时也可能更高效。标准SQL方法是:
UPDATE table
SET name =
CASE WHEN id=1 THEN "first"
CASE WHEN id=2 THEN "second"
END
WHERE id IN (1,2)
另一个选项是创建临时表,插入所有键值对,并在
UPDATE
语句中执行JOIN
有什么问题?你不知道如何使用ado.net进行更新吗?我需要在单个过程中进行批量更新。你甚至不需要一个过程来完成此操作,这是一个简单的SQL语句。(不过这是在ado.net中完成的,我不太熟悉。)您需要将字典转换为数据表
。我几乎可以肯定字典是C
list@JuanCarlosOropeza-然后OP(或熟悉ado.net和C#to-Oracle的人)将演示如何“查看”C#list作为视图或临时表。@NicholasKrasnov-当然,这就是我要写的。现在修复它。我需要将c#代码中的int、string字典作为varchar或任何其他数据类型传递给oracle过程,并使用out case语句高效地进行更新,因为我将拥有大量数据。我知道一点c#,但从不同的上下文来看,我没有在oracle中使用它。如果您知道如何从c#传递数据以在Oracle中创建临时表,您可以使用上面的merge
语句。@mathguy不适用于计算机:)哦-如果计算机将生成代码,那么我同意。:-)
UPDATE table
SET name =
CASE WHEN id=1 THEN "first"
CASE WHEN id=2 THEN "second"
END
WHERE id IN (1,2)