Problemas con sp_executesql y Scope_Identity()

12/01/2004 - 17:24 por Mario Barro | Informe spam
Hola a todos/as;

Estoy realizando una insercción con sql de forma dinámica (sp_executesql) y
al terminar de ejecutarse necesito recuperar el último valor insertado
mediante Scope_Identity() pero devuelve siempre nulo, aunque la insercción
se realiza.

********************************
Ejemplo:

Declare @Campo1 int
Set @Campo1 = 1

Declare @str nvarchar(500)
Set @str = N'Insert into tabla (campo1) Values (@Campo1)

Exec sp_executesql @str, N'@Campo1 int', @Campo1

Select Scope_Identity()
*******************************
Devuelve Null

¿Por qué ocurre esto?

Saludos
 

Leer las respuestas

#1 Carlos Sacristan
12/01/2004 - 17:40 | Informe spam
Eso ocurre porque SCOPE_IDENTITY devuelve el último IDENTITY insertado
en la tabla en el alcance actual (procedimiento, trigger, función o lote).
Cuando lanzas una ejecución dinámica es como si lanzaras otro lote, por lo
que SCOPE_IDENTITY no te va a retornar lo que tú necesitas.

Si quieres seguir utilizando la ejecución dinámica deberás incluir la
sentencia 'SELECT @newId=SCOPE_IDENTITY' al final, y declarar la variable
@newId como OUTPUT, algo similara a:

Declare @Campo1 int, @newId int
Set @Campo1 = 1

Declare @str nvarchar(500)
Set @str = N'Insert into tabla (campo1) Values (@Campo1)

Exec sp_executesql @str, N'@Campo1 int, @newId int OUTPUT', @Campo1,
@newId=@newId OUTPUT

SELECT @newId [nuevo Identity recién insertado]




Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Mario Barro" escribió en el mensaje
news:
Hola a todos/as;

Estoy realizando una insercción con sql de forma dinámica (sp_executesql)


y
al terminar de ejecutarse necesito recuperar el último valor insertado
mediante Scope_Identity() pero devuelve siempre nulo, aunque la insercción
se realiza.

********************************
Ejemplo:

Declare @Campo1 int
Set @Campo1 = 1

Declare @str nvarchar(500)
Set @str = N'Insert into tabla (campo1) Values (@Campo1)

Exec sp_executesql @str, N'@Campo1 int', @Campo1

Select Scope_Identity()
*******************************
Devuelve Null

¿Por qué ocurre esto?

Saludos


Preguntas similares