SQL - Problema con #temp en Store Procedure

 
Vista:
sin imagen de perfil

Problema con #temp en Store Procedure

Publicado por fernando (5 intervenciones) el 15/02/2016 19:44:17
Hola estimados tengo un problema al tratar de insertar valores a una tabla temporal que se crea dentro de un procedimiento almacenado. lo que sucede es que cada vez que ejecuto el exec dbo.insertar'dato1'....... y se ejecuta el procedimiento me crea la tabla temporal y me inserta el valor dentro de la tabla pero al ejecutar el segundo exec dbo.inserta'dato1'.....se me genera el problema de no guarda el dato anterior y se pierde en el proceso. se que al terminar el procedimiento se borra la tabla temporal pero no se me ocurre la manera de encontrar una solución al problema. Si pudieran ayudarme se los agradecería

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con #temp en Store Procedure

Publicado por leonardo_josue (1173 intervenciones) el 15/02/2016 21:23:44
Hola Fernando:

Vayamos por partes, primero que nada acláranos con qué motor de BD's estás trabajando? puedo suponer que se trata de SQL Server, pero sólo Dios y tú saben con qué versión o edición lo estás haciendo.

Segundo, las tablas temporales son eso, temporales, es decir, la tabla temrporal "existe" solo mientras está activa la sesión con la que fue creada, esto es perfectamente normal

Si en tu caso necesitas que la tabla sea "permanente" entonces no puedes crearla como tabla temporal.

Ahora bien, NO ES RECOMENDABLE que se creen tablas temporales en tiempo de ejecución, esto es una pésima práctica y deberías evitarla en todo momento. de hecho la creación de tablas en una BD's es una tarea que debe hacer sólo el DBA y en teoría si tienes un buen modelo de BD's entonces sólo se crean tablas una vez y después simplemente se les da mantenimiento, salvo alguna excepción que amerite crear tablas nuevas. Mi pregunta entonces sería por qué razón tienes necesidad de crear tablas temporales. Comienza por explicarnos esto y tal vez te podamos indicar alguna otra forma de hacerlo.

Saludos.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problema con #temp en Store Procedure

Publicado por fernando (5 intervenciones) el 15/02/2016 21:47:36
Estimado muchas gracias por responder te explico mejor.

Primero efectivamente estoy trabajando en sqlserver 2014 y mi problema radica en que tengo que incorporar mes a mes un excel con muchos datos a la base de datos(al día de hoy esos datos solo están en excel y tengo que lograr respaldar todos los datos). Para esto (A modo de prueba ya que estoy probando cosas) diseñe una macro que lee fila a fila el documento y la idea es incorporarlos a la base de datos. Dicha macro por ejemplo me lee la primera fila y lo envía al procedimiento almacenado , luego la segunda...etc...donde tenia intenciones que primero se incorporara a una tabla temporal, para verificar que todos los datos estuvieran correctos(ya que son muchos) y una vez que se corroborara la información insertarla en una tabla permanente.

Inicialmente inserte todos los datos directamente a la tabla permanente pero me surgió la duda de que pasaría si de esos miles de datos, una inserción falla y se pierde por lo que pensé en primero recurrir a una tabla temporal(tal vez estoy analizando mal las cosas)

Como dije anteriormente estoy en proceso de diseño por lo que acepto cualquier sugerencia y te agradezco la ayuda

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problema con #temp en Store Procedure

Publicado por leonardo_josue (1173 intervenciones) el 16/02/2016 15:37:21
Hola de nuevo Fernando:

Tu problema es bastante típico, y aunque no hay una única forma de hacerlo, el procedimiento "estandar" es el siguiente:

1. La información se inserta en una tabla de paso, (ojo, no confundir con una tabla temporal)... es decir, una tabla cuya única función es almacenar los datos contenidos en el archivo de excel o en el archivo txt, y que una vez concluido el proceso, se vacía... esta tabla no contiene ningún tipo de índice ni llave foránea, es simplemente un contenedor de datos.

2. El archivo se inserta completo en la tabla de paso, de preferencia haciendo BULK INSERT's, ya que es la manera más rápida de cargar la información a la tabla. En este paso es donde se valida que se hayan realizado todos los insert's de tu tabla excel.

3. Una vez cargada toda la información en la tabla, entonces sí procedes ha pasar la información de tu tabla de paso a tu tabla definitiva... aquí haces las validaciones pertinentes, por ejemplo verificar si el registro está duplicado, si tienes que hacer alguna actualización y en fin todas las validaciones que tu lógica de negocio tenga.

4. Una vez que hayas terminado con todas las validaciones, entonces borras el contenido de la tabla de paso.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problema con #temp en Store Procedure

Publicado por fernando (5 intervenciones) el 16/02/2016 15:47:10
Muchas gracias por tus respuestas y tu tiempo Leonardo me haz ayudado mucho y ya tengo en mente los pasos a seguir gracias a ti. me despido por ahora y te deseo lo mejor

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar