RioLab

  • Aumenta dimensione caratteri
  • Dimensione caratteri predefinita
  • Diminuisci dimensione caratteri
Home Articoli Access Access riceve un valore @@Identity sbagliato

Access riceve un valore @@Identity sbagliato

E-mail Stampa PDF

Access riceve un valore @@Identity sbagliato se la tabella ha un trigger che inserisce una o più righe in un'altra tebella che ha un campo di tipo contatore.

Riferimento: ACC2002: @@IDENTITY Returns Incorrect Identity Column Value
Soluzione: All'interno del trigger viene salvato il valore della variabile @@Identity e prima di uscire, viene inserita una riga nella tabella temporanea #Tmp. L'inserimento viene eseguito utilizzando la IDENTITY (Function) il cui secondo parametro, (seed), è valorizzato all' Identity precedentemente salvato.
Con questo trucchetto forziamo Sql Server a rendere nella variabile @@Identity il valore dell'Id assegnato a Tabella1.

Questa soluzione evita di eseguire il refresh dela maschera che nei progetti ADP di Access implica la rilettura di tutto il recordset.


Esempio

------------------------------------------
USE Northwind
GO
-- Creo la prima tabella (Tabella1)
-- il valore dell'identity partirà da 1
CREATE TABLE Tabella1
(
ID Int NOT NULL IDENTITY (1,1) Primary Key,
Campo1 Varchar(50)
)
GO

-- Creo la seconda tabella (Tabella2)
-- il valore dell'identity partirà da 100
CREATE TABLE Tabella2
(
ID Int NOT NULL IDENTITY (100,1) Primary Key,
Campo1 Varchar(50)
)
GO
-- Creo il trigger
CREATE TRIGGER TR_Tabella1 ON dbo.Tabella1
FOR INSERT
AS
SET NOCOUNT ON
-- Dichiaro le variabili
DECLARE @Identity Int,
@sql Nvarchar(100)
-- Salvo L'identity
SET @Identity=@@Identity

-- Inserisco la riga in tabella 2
INSERT Tabella2
SELECT Campo1
FROM   INSERTED
-- Ripristino il valore dell'identity salvato
SET @Sql=N'SELECT Identity(int,'+Convert(nvarchar,@Identity)+',1) as Id INTO #Tmp'
EXEC sp_executesql @Sql
GO
-----------------------------------------------

Aprite un progetto ADP di Access, collegatelo al database NorthWind e provate ad inserire alcune righe in Tabella1. L'errore non si presenterà.

Un ringraziamento a Nik Sestrin che già nel settembre 2001 suggerì questa soluzione. http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=O1BcqJTQBHA.1788%40tkmsftngp05

 

 

 


Sistema operativo: Win32
Applicazioni: Access 2000, Access 2002/XP, Access 2003

 

Ultimo aggiornamento Mercoledì 01 Luglio 2009 17:13  

Pubblicità

Link consigliati: