sql >> Database teknologi >  >> RDS >> Sqlserver

Stop Access fra at bruge forkert identitet, når du tilføjer til linket tabel på SQL-serveren

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 @[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)


  1. Beregn gennemsnit, varians og standardafvigelse af to tal i to forskellige rækker/kolonner med sql / PHP på bestemte datoer

  2. MySQL med Sequelize:ER_BAD_DB_ERROR:Ukendt database

  3. Slet rækker fra to tabeller i én forespørgsel

  4. Hvordan konfigureres Hibernate, Spring og Apache dbcp til forbindelsespooling?