O Copilot me mostrou um truque interessante com MySQL para carregar valores incrementais em um conjunto de campos, como este:
UPDATE table set field = (@n := @n + 1)
where (@n := 0) = 0
que colocará 1 no campo da primeira linha, 2 na segunda linha, 3 na terceira e assim por diante. Estou tentando executar isso através do NPoco e, assim, codificá-lo com a arroba dobrada:
db.Execute(@"UPDATE table set field = (@@n := @@n + 1)
where (@@n := 0) = 0");
no entanto, o Execute lança uma exceção de que "O parâmetro @n deve ser definido".
Existe uma maneira de executar isso sem interpretação do sinal @?
PS: Sei que ter variáveis de usuário em expressões está obsoleto. Talvez haja uma maneira melhor de obter o mesmo resultado sem variáveis de usuário?
Aqui está uma solução que testei:
Isso requer MySQL 8.0+ para uso de CTE e função de janela. Versões anteriores do MySQL não são mais suportadas.