>Dovre creare una store procedure ma nn sono molto pratico
>
>Praticamente dovrei farmi restituire l'id dell'utlimo record
>creato in una tabella
> qualcuno puo aiutarmi???
Ciao M@LKAV,
Domanda da $1.000.000: con che DBMS?
SQL Server offre storicamente la funzione @@IDENTITY per recuperare l'ultimo valore generato da una operazione di INSERT su una tabella avente una colonna numerica con con l'attrbuto IDENTITY.
Il problema però è che lo scope di questa funzione è a livello di connessione.
Che significa?
Se ad esempio il comando di INSERT della tua sp agisce su una tabella con un trigger di INSERT che va ad aggiornare una seconda tabella con una colonna IDENTITY, la funzione @@IDENTITY ti restituirà il valore generato da quest'ultima tabella invece che quello determinato dalla tua operazione di inserimento.
Per ovviare a questo problema, SQL Server 2000 implementa la funzione SCOPE_IDENTITY() il cui scope è quello locale alla tua procedura/batch e quindi ti restituisce effettivamente il valore generato dalla tua operazione di INSERT.
OK, vediamo di scrivere un piccolo esempio:
USE tempdb;
GO
/* Creo la tabella dbo.Students */
CREATE TABLE dbo.Students(
StudentID int NOT NULL IDENTITY PRIMARY KEY,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL,
InsertDate datetime NOT NULL
);
GO
/* Creo la stored procedure dbo.up_AddStudent */
CREATE PROCEDURE dbo.up_AddStudent(
@FirstName varchar(10),
@LastName varchar(10)
)
AS
INSERT dbo.Students
VALUES (@FirstName, @LastName, GETDATE())
RETURN SCOPE_IDENTITY();
GO
/* Inserisco qualche studente */
DECLARE @StudentID int;
EXEC @StudentID = dbo.up_AddStudent 'Lorenzo', 'Benaglia';
SELECT @StudentID AS StudentID;
GO
/* Output:
(1 row(s) affected)
StudentID
-----------
1
(1 row(s) affected)
*/
DECLARE @StudentID int;
EXEC @StudentID = dbo.up_AddStudent 'Gianluca', 'Hotz';
SELECT @StudentID AS StudentID;
GO
/* Output:
(1 row(s) affected)
StudentID
-----------
2
(1 row(s) affected)
*/
DECLARE @StudentID int;
EXEC @StudentID = dbo.up_AddStudent 'Luca', 'Bianchi';
SELECT @StudentID AS StudentID;
GO
/* Output:
(1 row(s) affected)
StudentID
-----------
3
(1 row(s) affected)
*/
/* Query */
SELECT *
FROM dbo.Students;
GO
/* Output:
StudentID FirstName LastName InsertDate
----------- ---------- ---------- -----------------------
1 Lorenzo Benaglia 2006-09-04 10:47:51.857
2 Gianluca Hotz 2006-09-04 10:48:26.653
3 Luca Bianchi 2006-09-04 10:48:44.000
(3 row(s) affected)
*/
GO
/* Pulizia */
DROP PROCEDURE dbo.up_AddStudent;
DROP TABLE dbo.Students;
>Thanks
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org