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

Preguntas similare

Leer las respuestas

#6 Miguel Egea
12/01/2004 - 18:44 | Informe spam
@@identity, no creo que te diera problemas excepto si existen triggers.
El resto de preguntas, intento contestarelas desde casa con más calma,
intentaré explicarte como funciona el script de carlos.
En cuanto a crear 50 procedimientos, yo lo prefiero, la ejecución dinamica
solo cuando es inevitable, a sql no le cuesta tener esos procedimientos, el
coste viene por que al programador le resulta más comodo, no por sql. ADemás
crear el script que genere los procedimientos para las tablas es muuuuy
fácil. Incluso daría al procedimiento la posibilidad de devolverlas.
En fin, cuando llegue acas intento responder más claro.
Saludos



"Mario Barro" escribió en el mensaje
news:
El caso es que el no utilizar ejecucíon dinámica, supondría que si tengo


50
tablas iguales en las cuales sólo cambia el nombre, tendría que crear 50
procedimientos almacenados para realizar las insercciones, cuando con uno
bastaría.
De la otra manera cuando se genera la base de datos, se generan estos
procedimientos almacenados genéricos ( que lo que añaden es que le pasas


el
nombre de la tabla) y sirven para todas las tablas que se generen a
posteriori.
No sé si existe otra solución a esta cuestión?

Por otro lado, no acabo de entender el funcionamiento del script que ha
sugerido Carlos y cómo se comportaría ante insercciones por otros


procesos
(concurrentemente) de manera masiva.

Otra cuestión (abusando de vuestra paciencia), no se comportaría
correctamente, también recuperar "@@Identity" tras una insercción


realizada
en un procedimiento almacenado (con la ejecución dinámica, pero que no
realiza ninguna otra acción más que insertar). Entiendo que cada conexión


y
ejecución del procedimiento se realizaría en una sesión independiente, no?

Muchas gracias.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida