Một dấu vết ODBC cho thấy Access thực sự đang gọi SELECT @@IDENTITY
(trái ngược với SCOPE_IDENTITY()
) sau khi chèn hàng vào bảng được liên kết của SQL Server:
Database1 e00-1490 EXIT SQLExecDirectW with return code 0 (SQL_SUCCESS)
HSTMT 0x00000000004D6990
WCHAR * 0x000000000F314F28 [ -3] "INSERT INTO "dbo"."Table1" ("txt") VALUES (?)\ 0"
SDWORD -3
...
Database1 e00-1490 EXIT SQLExecDirectW with return code 0 (SQL_SUCCESS)
HSTMT 0x00000000004D6990
WCHAR * 0x000007FED7E6EE58 [ -3] "SELECT @@IDENTITY\ 0"
SDWORD -3
Hơn nữa, hành vi này dường như phụ thuộc vào trình điều khiển ODBC đang được sử dụng, vì một thử nghiệm tương tự với MySQL Connector / ODBC cho thấy Access không gọi hàm MySQL tương ứng LAST_INSERT_ID()
sau khi chèn một hàng vào bảng được liên kết MySQL.
Cho rằng Access đang gọi SELECT @@IDENTITY
, chúng tôi phải sửa đổi trình kích hoạt của mình như sau (nguồn: tại đây
) để đặt lại giá trị @@ IDENTITY trở lại giá trị ban đầu của nó
create trigger mytable_insert_trigger on mytable for insert as
declare @identity int
declare @strsql varchar(128)
set @[email protected]@identity
--your code
--insert into second table ...
--your code
set @strsql='select identity (int, ' + cast(@identity as varchar(10)) + ',1) as id into #tmp'
execute (@strsql)