Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Спрете Access да използва грешна самоличност при добавяне към свързана таблица на SQL сървър

ODBC проследяване разкрива, че Access наистина извиква SELECT @@IDENTITY (за разлика от SCOPE_IDENTITY() ) след вмъкване на реда в свързаната таблица на 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

Освен това това поведение изглежда зависи от използвания ODBC драйвер, тъй като подобен тест с MySQL Connector/ODBC показва, че Access не извиква съответната MySQL функция LAST_INSERT_ID() след вмъкване на ред в MySQL свързана таблица.

Като се има предвид, че Access извиква SELECT @@IDENTITY , трябва да променим нашия тригер, както следва (източник: тук ), за да нулирате стойността @@IDENTITY обратно към първоначалната й стойност

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. „Атомарно“ ли е изпълнението на T-SQL съхранена процедура?

  2. Могат ли двойни кавички да се използват за ограничаване на низ?

  3. Как да премахнете ограничение в SQL Server (T-SQL)

  4. Преобразувайте низ в стойност за дата и час в LINQ

  5. PHP Фатална грешка:Извикване на недефинирана функция mssql_query()