En ODBC-sporing afslører, at Access faktisk kalder SELECT @@IDENTITY (i modsætning til SCOPE_IDENTITY() ) efter at have indsat rækken i den SQL Server-linkede tabel:
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
Desuden ser denne adfærd ud til at afhænge af den ODBC-driver, der bruges, da en lignende test med MySQL Connector/ODBC viser, at Access ikke kalder den tilsvarende MySQL-funktion LAST_INSERT_ID() efter at have indsat en række i en MySQL-linket tabel.
Givet at Access kalder SELECT @@IDENTITY , skal vi ændre vores trigger som følger (kilde: her
) for at nulstille @@IDENTITY-værdien tilbage til dens oprindelige værdi
create trigger mytable_insert_trigger on mytable for insert as
declare @identity int
declare @strsql varchar(128)
set @example@sqldat.com@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)