更新后检索列的值?

Retrieve value of a column after update?

我用这个 FDQuery SQL:

更新了一个计数器(没有自动增量...不是我的数据库...)
UPDATE CountersTables
SET Cnter = Cnter + 1
OUTPUT Inserted.Cnter
WHERE TableName = 'TableName'

我执行 FDQuery.ExecSQL 并且它有效:'Cnter' 递增。

我需要检索新的 'Counter' 值,但后续命令

newvalue := FDQuery.FieldByName('Cnter').AsInteger

失败并出现错误:

... EDatabaseError ... 'CountersTables: Field 'Cnter' not found.

获取该值的方法是什么?

TFDQuery.ExecSQL() 适用于 return 记录的查询。但是您要求查询 return 一条记录。所以使用 TFDQuery.Open() 代替,例如:

FDQuery.SQL.Text :=
  'UPDATE CountersTables' +
  ' SET Cnter = Cnter + 1' +
  ' OUTPUT Inserted.Cnter' +
  ' WHERE TableName = :TableName';
FDQuery.ParamByName('TableName').AsString := 'TableName';
FDQuery.Open;
try
  NewValue := FDQuery.FieldByName('Cnter').AsInteger;
finally
  FDQuery.Close;
end;

如果您连接的数据库不支持 OUTPUTUPDATE OUTPUT into a variable 显示了一些替代方法,您可以将更新的计数器保存到本地 SQL variable/table然后你可以 SELECT from.

您还有 RETURNING Unified support 好的,文档只显示 INSERT SQL 但 UPDATE 也有效。 我应该使用 substitution variable 作为表名