Firebird

firebird 3 標識列 - 返回最後插入的 id

  • November 23, 2019

我在 Delphi 101.Berlin 中使用 FireDAC,我想IDENTITY DATA TYPE在執行插入查詢後獲取最後插入的列 id,但是返回值為

詢問:INSERT INTO ACC_ACCOUNT_HEAD (ACCOUNT_HEAD_TITLE) VALUES ('TEST') returning ACCOUNT_HEAD_ID;

表結構

CREATE TABLE ACC_ACCOUNT_HEAD (
ACCOUNT_HEAD_ID       INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL,
 ACCOUNT_HEAD_TITLE    VARCHAR(208),
 PRIMARY KEY (ACCOUNT_HEAD_ID)
);

**注意:**我知道生成器可以,但我想知道IDENTITY列是否可以。

完整的德爾福程式碼:

var
aQry : TFDQuery;
begin
aQry := TFDQuery.Create(Self);
aQry.Connection := frmMain.aCon;

aQry.SQL.Text :=
     'INSERT INTO ACC_ACCOUNT_HEAD (ACCOUNT_HEAD_TITLE) VALUES (:P1) returning ACCOUNT_HEAD_ID';
   aQry.ParamByName('P1').AsString := 'Testing';
   aQry.ExecSQL; // or Should I use aQry.Open(); to get returned value???

查看有關 ExecSQL的Delphi 文件。(粗體是我的)

ExecSQL 返回一個整數值,反映受執行的 SQL 語句影響的行數。

我主要是 CBuilder++(舊)使用者,但您可以嘗試使用:

aQry.Open();
result := aQry.Fields[0].AsInteger;
aQry.Close();

讓我建議將查詢包含在 try-catch 塊中。

引用自:https://dba.stackexchange.com/questions/253982