【发布时间】:2016-05-19 12:53:35
【问题描述】:
我正在处理一个项目,我必须更新同一列中的多条记录。我的值存储在与我必须在 WHERE 子句中使用的 ID 相同的列表中。我想知道是否可以使用“IN”而不是“=”并更新列表中的所有值?这是我的列表代码:
<cfset listUserNum = ArrayToList(userNum)>
<cfset listUserCode = ArrayToList(userCode)>
它们看起来像这样:
listUserNum = "72,15,71,27,16,14,22";
listUserCode = "B,B,C,T,R,M,Y";
这是我的更新声明:
<cfquery name="UpdateUsers" datasource="test">
Update Users
Set UserCode in <cfqueryparam value="#listUserCode#" cfsqltype="cf_sql_varchar" list="yes" />
Where UserNumber in <cfqueryparam value="#listUserNum#" cfsqltype="cf_sql_integer" list="yes" />
</cfquery>
过去我在 WHERE 子句中使用了“IN”,但从未在 SET 中使用过。让我知道我在这里做错了什么或者是否有更好的方法来做到这一点。我还没有尝试过,因为我必须更新大约 20k 条记录,并且我想确保这是我运行更新之前的最佳方式。谢谢!
【问题讨论】:
-
否 - 您只能将字段设置为单个值,因此
in没有任何意义。创建一个包含两列的临时表(如果查找很少更改,则为静态表),然后在更新中加入该表。 -
我不能在我的项目中使用临时表。这就是我必须使用列表并尝试以这种方式更新我的记录的方式。那么另一种选择是什么?谢谢。
-
您可以在子查询中进行大规模联合以创建准临时表。
-
@DStanley 我以前从未这样做过。你能提供任何例子吗?谢谢。
标签: sql oracle list sql-update