Access riceve un valore @@Identity sbagliato |
|
Scritto da Giorgio Rancati
|
Domenica 24 Luglio 2005 13:26 |
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 |