问题描述
我在数据库my_table_ext [ID,CITY_ID,CTN,EXT,InUse]
中有表
输入数据
{1,'City1','001','1234',0}
{2,'3456',0}
在MSsql中,我具有以下sql代码以返回具有更新参数InUse(0> 1)的唯一记录
update A set A.InUse=1
output inserted.ID,inserted.CTN,inserted.EXT
into @ext (EXT_ID,EXT)
from
(select top 1 ID,InUse from
my_table_ext with(readpast)
where CITY_ID=@city_id and InUse=0
) A
where ID=A.ID
问题是-在Lua / Tarantool中如何重复?
解决方法
在Tarantool中,您可以使用box.execute()执行SQL语句。 Tarantool中使用的SQL方言源自SQLite,因此支持您示例中的子查询。
不幸的是,不支持OUTPUT子句。您必须将查询拆分为UPDATE和SELECT。由于这些全部在内存中,因此开销不会很明显。
如果您希望这两个查询是原子查询,则可以在事务中同时进行。要了解有关Tarantool中MVCC的更多信息,请查看以下答案:Can I yield during an transaction in Tarantool?。