Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hentikan Access dari menggunakan identitas yang salah saat menambahkan ke tabel tertaut di server SQL

Jejak ODBC mengungkapkan bahwa Access memang memanggil SELECT @@IDENTITY (sebagai lawan dari SCOPE_IDENTITY() ) setelah memasukkan baris ke tabel tertaut 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

Selanjutnya, perilaku ini tampaknya bergantung pada driver ODBC yang digunakan, karena pengujian serupa dengan Konektor MySQL/ODBC menunjukkan bahwa Access tidak memanggil fungsi MySQL yang sesuai LAST_INSERT_ID() setelah memasukkan baris ke tabel tertaut MySQL.

Mengingat bahwa Access memanggil SELECT @@IDENTITY , kita harus memodifikasi pemicu kita sebagai berikut (sumber: di sini ) untuk menyetel ulang nilai @@IDENTITY kembali ke nilai aslinya

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. Cara Memetakan Banyak Partisi ke Satu Filegroup di SQL Server (T-SQL)

  2. SQL Server Alokasi jumlah dalam tagihan

  3. Dapatkan tanggal mulai minggu dan tanggal akhir minggu dari nomor minggu

  4. Menambahkan kolom pengenal unik dan menambahkan default untuk menghasilkan panduan baru

  5. SQL Server ORDER BY tanggal dan nol terakhir