sql-server - 更新后检索列的值?

标签 sql-server delphi firedac

我使用以下 FDQuery SQL 更新计数器(无自动增量...不是我的数据库...):

UPDATE CountersTables
SET Cnter = Cnter + 1
OUTPUT Inserted.Cnter
WHERE TableName = 'TableName'

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

我需要检索新的“计数器”值,但后续命令

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

因错误而失败:

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

如何获取该值?

最佳答案

TFDQuery.ExecSQL() 适用于返回记录的查询。但是您要求查询返回一条记录。因此请使用 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 变量/表中,然后您可以从中SELECT

关于sql-server - 更新后检索列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71012449/

相关文章:

c# - 在 C# 和 SQL 注入(inject)中创建数据库

sql-server - 长时间锁定记录是现代数据库系统的常见做法吗?

sql - 获得准确的百分比计算

mysql - 如何在 Laravel 5 中为 Yajra 数据表指定特定连接(或数据库名称)

delphi - 从 Delphi 应用程序发送 WM_COPY。到 Windows 7 中的另一个进程

delphi - TPageControl.OnChange 中的缓慢事件处理程序会导致奇怪的行为

xml - Delphi - 我可以使用 NativeXml 创建规范的 XML 吗?

Delphi:DBexpress 比 Firedac 快吗

ssl - 如何使用 Embarcadero FireDAC 在 AWS RDS 上托管的 MariaDB 上设置 SSL

sql-server - 以编程方式将数据库用户设置为 db_owner