Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2005
carlos7 carlos7 is offline
Miembro
 
Registrado: sep 2004
Posts: 11
Poder: 0
carlos7 Va por buen camino
¿ Me puedo fiar de SCOPE_IDENTITY?

Hola a todos;

Estoy escribiendo un procedimiento almacenado que inserta un registro de cabecera en una tabla T1 y varios registros de detalle en otra tabla T2. La tabla T1 tiene definida una clave primaria en un campo identidad que es por la que se enlaza con los registros de la tabla T2.

Realizo los siguientes pasos:

Insert into T1

Select SCOPE_IDENTITY

Inset into T2 (con el valor identidad que he obtenido)

Mi duda está en que pasa si se están ejecutando varias instancias del procedimiento a la vez (se trata de una aplicación en internet). ¿Puedo estar seguro de que SCOPE_IDENTITY me devuelve la identidad insertada en "su instancia" de procedimiento alamcenado y no en otras?

En caso contrario, ¿hay otra forma de hacer esta inserción maestro detalle?

Muchas gracias por adelantado...
Carlos.
Responder Con Cita
  #2  
Antiguo 30-10-2005
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Este hilo puede servirte..

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #3  
Antiguo 30-10-2005
Avatar de Xianto
Xianto Xianto is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nací en Neuquén (ARG), desde 2001 Spain
Posts: 151
Poder: 20
Xianto Va por buen camino
Buenas, la verdad que nunca he utilizado el SCOPE_IDENTITY, no porque no lo conozca, sino porque el comando que utilizo, es tal vez más usado ó esta en más ejemplos.

Código:
 
Insert into T1 (campos....) values (valores...)
 
Insert into T2 (id_tabla_t1, campos....) values(@@identity, valores)
Si haces un insert en una tabla que tiene una clave principal establecida, el comando @@identity te dira cual es el último insertado.

El @@identity es un comando que va por la conexión, o sea que cuando inicias el procedimiento, hasta que termina, solo usa una unica conexión con la DB, asi que el @@identity sera el último ID que hayas insertado desde esa conexión, por lo cual si tienes multiples instancias del procedimiento en ejecución el resultado del @@identity sera distinto para cada una, nunca se equivoca... jejeje

Usalo sin miedo, yo tengo más de 10000 transacciones diarias de inserción y jamas se ha producido un fallo.
__________________
El diseño dira si tiene futuro...
Responder Con Cita
  #4  
Antiguo 31-10-2005
carlos7 carlos7 is offline
Miembro
 
Registrado: sep 2004
Posts: 11
Poder: 0
carlos7 Va por buen camino
Smile

Gracias a ambos. Lo utilizaré pues sin miedo...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:05:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi