雪地
发布于

如何使用 NPoco 执行 SQL,而不解释 @ 符号

有个巧妙的技巧,即使用 MySQL 将递增的值加载到一组字段中,如下所示:

  UPDATE table set field = (@n := @n + 1)
where (@n := 0) = 0

这会将 1 放入第一行的字段中,将 2 放入第二行,将 3 放入第三行,依此类推。我正在尝试通过 NPoco 执行此操作,因此使用 at 符号加倍对其进行编码:

  db.Execute(@"UPDATE table set field = (@@n := @@n + 1)
             where (@@n := 0) = 0");

但是,Execute 会引发“必须定义参数 @n”的异常。

有没有办法在不解释 @ 符号的情况下执行此操作?

PS:有意识到在表达式中包含用户变量已被弃用。也许有更好的方法可以在没有用户变量的情况下获得相同的结果?

浏览 (5)
点赞
收藏
1条评论
Klustron小助手
试试这个 with cte as ( select id, row_number() over () as rownum from mytable ) update mytable join cte using (id) set field = rownum; 这需要 MySQL 8.0+ 才能使用 CTE 和窗口功能。不再支持以前版本的 MySQL。
点赞
评论