Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zatrzymaj dostęp przed używaniem niewłaściwej tożsamości podczas dołączania do tabeli połączonej na serwerze SQL

Ślad ODBC pokazuje, że program Access rzeczywiście wywołuje SELECT @@IDENTITY (w przeciwieństwie do SCOPE_IDENTITY() ) po wstawieniu wiersza do połączonej tabeli 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

Ponadto wydaje się, że to zachowanie zależy od używanego sterownika ODBC, ponieważ podobny test z MySQL Connector/ODBC pokazuje, że program Access nie wywołuje odpowiedniej funkcji MySQL LAST_INSERT_ID() po wstawieniu wiersza do tabeli połączonej MySQL.

Biorąc pod uwagę, że Access wywołuje SELECT @@IDENTITY , musimy zmodyfikować nasz wyzwalacz w następujący sposób (źródło: tutaj ), aby zresetować wartość @@IDENTITY do pierwotnej wartości

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. Najlepsze indeksy do użycia w instrukcji OR w SQL Server

  2. Jak zrobić instalator w VB.NET, który może zainstalować SQL Server Express Edition?

  3. Jakie magiczne tabele są dostępne w SQL Server 2000?

  4. Wyzwalanie wstawia stare wartości - wartości, które zostały zaktualizowane

  5. Porzucanie nienazwanych ograniczeń