Tablas temporales en SQL Server

25/02/2005 - 10:19 por Juan Pedro Gonzalez | Informe spam
Hola,

Se me ha presentado un pequeño problema de desarrollo, os lo explico a
continuacion para ver si alguien me puede hechar un cable.

En un formulario de VB .NET tengo una serie de datos que debe introducirse
en una base de datos de SQL Server (en tres tablas). Me gustaria evitar la
corrupcion de los datos en el SQL Server, y existen problemas con la red.
Para solucionar este problema se me ocurrio emplear XML, pero algunos de los
datos son strings, y podrian enviar comillas produciendo errores en el
XML... Por ello se me ocurrio crear un procedimiento que generase dos tablas
temporales (#primera y #segunda). Desde VB .NET trato de introducir los
datos en dichas tablas temporales y una vez que todo ha sido realizado sin
errores llamo a un segundo procedimiento almacenado que copiara los datos de
dichas tablas a las tablas reales.

El problema se presenta con los INSERT del VB .NET, ya que cuando llamo a
#primera me dice que el nombre de la tabla no es valido. ¿Como se emplea una
tabla temporal desde VB .NET?

Tambien me ha surgido otra duda: ¿Donde puedo ver la tabla temporal?
Especialmente para poder observar si la tabla se ha generado
correctamente... Yo pensaba que era en Tempdb pero no se puede ver nada...

Y ya puestos a preguntar... Los usuario se conectan a la base de datos
empleando autenticacion SQL Server, y acceden a la base de datos a traves de
un Rol de aplicacion. La Tabla temporal se genera para su login de usuario o
para el rol de aplicacion? Supongo que sera para su login de usuario, ya que
es el que contendra la informacion de la sesion, y aparte de eso, si acaba
en TempDB dudo que coja el rol de aplicacion de la otra base de datos.

Tambien me pregunto si la tabla temporal solo puede ser accedida por el
usuario que la ha creado (No es una tabla temporal global), o si se deberia
aplicar algun tipo de seguridad adicional para evitar que otro usuario la
consulte.

Un saludo

Preguntas similare

Leer las respuestas

#6 Eladio Rincón
25/02/2005 - 12:40 | Informe spam
Juan,

has comentado que la tabla temporal la creas dentro del procedimiento
almacenado; este ejemplo reproduce lo que te sucede:

use northwind
go
drop proc proc_test
go
create proc proc_test
as
select * into #t from Orders
go

exec proc_test
select * from #t

tienes que tener en cuenta que cuando sales del ámbito de procedimiento
almacenado, la tabla temporal se destruye, por eso el error que se produce
en el select:

Server: Msg 208, Level 16, State 1, Line 4
Invalid object name '#t'.

por lo que veo en tu mensaje parece que quieres insertar datos en local (sin
tener que acceder a SQL Server), y en un momento determinado "consolidar"
esos datos en el servidor, ¿es correcto? cuentanos un poco más del
proceso...


Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Juan Pedro Gonzalez" wrote in message
news:#
Hola,

Se me ha presentado un pequeño problema de desarrollo, os lo explico a
continuacion para ver si alguien me puede hechar un cable.

En un formulario de VB .NET tengo una serie de datos que debe introducirse
en una base de datos de SQL Server (en tres tablas). Me gustaria evitar la
corrupcion de los datos en el SQL Server, y existen problemas con la red.
Para solucionar este problema se me ocurrio emplear XML, pero algunos de


los
datos son strings, y podrian enviar comillas produciendo errores en el
XML... Por ello se me ocurrio crear un procedimiento que generase dos


tablas
temporales (#primera y #segunda). Desde VB .NET trato de introducir los
datos en dichas tablas temporales y una vez que todo ha sido realizado sin
errores llamo a un segundo procedimiento almacenado que copiara los datos


de
dichas tablas a las tablas reales.

El problema se presenta con los INSERT del VB .NET, ya que cuando llamo a
#primera me dice que el nombre de la tabla no es valido. ¿Como se emplea


una
tabla temporal desde VB .NET?

Tambien me ha surgido otra duda: ¿Donde puedo ver la tabla temporal?
Especialmente para poder observar si la tabla se ha generado
correctamente... Yo pensaba que era en Tempdb pero no se puede ver nada...

Y ya puestos a preguntar... Los usuario se conectan a la base de datos
empleando autenticacion SQL Server, y acceden a la base de datos a traves


de
un Rol de aplicacion. La Tabla temporal se genera para su login de usuario


o
para el rol de aplicacion? Supongo que sera para su login de usuario, ya


que
es el que contendra la informacion de la sesion, y aparte de eso, si acaba
en TempDB dudo que coja el rol de aplicacion de la otra base de datos.

Tambien me pregunto si la tabla temporal solo puede ser accedida por el
usuario que la ha creado (No es una tabla temporal global), o si se


deberia
aplicar algun tipo de seguridad adicional para evitar que otro usuario la
consulte.

Un saludo


Respuesta Responder a este mensaje
#7 Juan
25/02/2005 - 13:50 | Informe spam
A ver comento un poco mas el caso...

En principio en los datos se dividen entre tres tablas... El caso real tiene
muchos matices, asi que para simplificarlo un poco pongamos que tenemos un
concesionario de coches, que es un caso mas rapido de comentar. Supongamos
que a nuestro concesionario nos llegan tres coches de un nuevo modelo.

Por un lado quiero inroducir los parametros que son comunes para todos
(TablaComun), Por otro lado quiero introducir los datos diferentes de cada
coche como el numero de bastidor, numero de motor, etc... La red me presenta
un problema, ya que esta muy cargada, e incluso puedo tener caidas de red,
por lo tanto no quiero tocar las tablas reales del servidor para evitar que
se puedan corromper los datos, o que no se agreguen todos los datos que
necesito.

Mi idea inicial era pasar los parametros comunes como parametros de un
procedimiento almaenado, y los detalles unicos para cada coche en un XML. El
problema que me encuentro aqui es que en la descripcion de un coche pueden
emplear texto en plan 'es un coche "Pequeño".' y creo que esas comillas me
darian problemas con el XML.

La otra solucion que se me habia ocurrido es introducir todos los datos en
una tabla temporal del SQL Server, de tal forma que se vayan introduciendo
los datos, y si no se produce ningun error entonces llamaria a un
procedimiento almacenado con los datos comunes para todos los coches, y el
propio procedimiento se encrgaría de realizar un "SELECT INTO" para copiar
los datos a las tablas reales del servidor. Al tener todos estos datos
controlados por el procedimiento podria abrir una transaccion antes de la
operacion y realizar un rollback en el caso de que algo fallase,
asegurandome asi que los datos se han introducido correctamente.
Adicionalmente, podria sacar el Identificador para el modelo del coche y
añadirselo a cada uno de los coches que han llegado sin necesidad de pasarle
esos datos poco a poco, con lo que lograria reducir la cantidad de datos que
pasan por la red y evitaria congestionarla aun mas.

No se si me he explicado demasiado bien... Digamos que me interesa tener los
datos en el servidor, pero que no sea en una de las tablas de trabajo sino
una intermedia... y que luego se introduzcan en la tabla correcta si
considero que todo ha ido bien. Evidentemente la tabla debe ser unica para
cada usuario ya que pueden existir varios usuarios introduciendo datos, y no
quiero que se mezclen entre si.

Saludos...



"Eladio Rincón" escribió en el mensaje
news:%
Juan,

has comentado que la tabla temporal la creas dentro del procedimiento
almacenado; este ejemplo reproduce lo que te sucede:

use northwind
go
drop proc proc_test
go
create proc proc_test
as
select * into #t from Orders
go

exec proc_test
select * from #t

tienes que tener en cuenta que cuando sales del ámbito de procedimiento
almacenado, la tabla temporal se destruye, por eso el error que se produce
en el select:

Server: Msg 208, Level 16, State 1, Line 4
Invalid object name '#t'.

por lo que veo en tu mensaje parece que quieres insertar datos en local


(sin
tener que acceder a SQL Server), y en un momento determinado "consolidar"
esos datos en el servidor, ¿es correcto? cuentanos un poco más del
proceso...


Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Juan Pedro Gonzalez" wrote in message
news:#
> Hola,
>
> Se me ha presentado un pequeño problema de desarrollo, os lo explico a
> continuacion para ver si alguien me puede hechar un cable.
>
> En un formulario de VB .NET tengo una serie de datos que debe


introducirse
> en una base de datos de SQL Server (en tres tablas). Me gustaria evitar


la
> corrupcion de los datos en el SQL Server, y existen problemas con la


red.
> Para solucionar este problema se me ocurrio emplear XML, pero algunos de
los
> datos son strings, y podrian enviar comillas produciendo errores en el
> XML... Por ello se me ocurrio crear un procedimiento que generase dos
tablas
> temporales (#primera y #segunda). Desde VB .NET trato de introducir los
> datos en dichas tablas temporales y una vez que todo ha sido realizado


sin
> errores llamo a un segundo procedimiento almacenado que copiara los


datos
de
> dichas tablas a las tablas reales.
>
> El problema se presenta con los INSERT del VB .NET, ya que cuando llamo


a
> #primera me dice que el nombre de la tabla no es valido. ¿Como se emplea
una
> tabla temporal desde VB .NET?
>
> Tambien me ha surgido otra duda: ¿Donde puedo ver la tabla temporal?
> Especialmente para poder observar si la tabla se ha generado
> correctamente... Yo pensaba que era en Tempdb pero no se puede ver


nada...
>
> Y ya puestos a preguntar... Los usuario se conectan a la base de datos
> empleando autenticacion SQL Server, y acceden a la base de datos a


traves
de
> un Rol de aplicacion. La Tabla temporal se genera para su login de


usuario
o
> para el rol de aplicacion? Supongo que sera para su login de usuario, ya
que
> es el que contendra la informacion de la sesion, y aparte de eso, si


acaba
> en TempDB dudo que coja el rol de aplicacion de la otra base de datos.
>
> Tambien me pregunto si la tabla temporal solo puede ser accedida por el
> usuario que la ha creado (No es una tabla temporal global), o si se
deberia
> aplicar algun tipo de seguridad adicional para evitar que otro usuario


la
> consulte.
>
> Un saludo
>
>


Respuesta Responder a este mensaje
#8 Juan
25/02/2005 - 13:50 | Informe spam
A ver comento un poco mas el caso...

En principio en los datos se dividen entre tres tablas... El caso real tiene
muchos matices, asi que para simplificarlo un poco pongamos que tenemos un
concesionario de coches, que es un caso mas rapido de comentar. Supongamos
que a nuestro concesionario nos llegan tres coches de un nuevo modelo.

Por un lado quiero inroducir los parametros que son comunes para todos
(TablaComun), Por otro lado quiero introducir los datos diferentes de cada
coche como el numero de bastidor, numero de motor, etc... La red me presenta
un problema, ya que esta muy cargada, e incluso puedo tener caidas de red,
por lo tanto no quiero tocar las tablas reales del servidor para evitar que
se puedan corromper los datos, o que no se agreguen todos los datos que
necesito.

Mi idea inicial era pasar los parametros comunes como parametros de un
procedimiento almaenado, y los detalles unicos para cada coche en un XML. El
problema que me encuentro aqui es que en la descripcion de un coche pueden
emplear texto en plan 'es un coche "Pequeño".' y creo que esas comillas me
darian problemas con el XML.

La otra solucion que se me habia ocurrido es introducir todos los datos en
una tabla temporal del SQL Server, de tal forma que se vayan introduciendo
los datos, y si no se produce ningun error entonces llamaria a un
procedimiento almacenado con los datos comunes para todos los coches, y el
propio procedimiento se encrgaría de realizar un "SELECT INTO" para copiar
los datos a las tablas reales del servidor. Al tener todos estos datos
controlados por el procedimiento podria abrir una transaccion antes de la
operacion y realizar un rollback en el caso de que algo fallase,
asegurandome asi que los datos se han introducido correctamente.
Adicionalmente, podria sacar el Identificador para el modelo del coche y
añadirselo a cada uno de los coches que han llegado sin necesidad de pasarle
esos datos poco a poco, con lo que lograria reducir la cantidad de datos que
pasan por la red y evitaria congestionarla aun mas.

No se si me he explicado demasiado bien... Digamos que me interesa tener los
datos en el servidor, pero que no sea en una de las tablas de trabajo sino
una intermedia... y que luego se introduzcan en la tabla correcta si
considero que todo ha ido bien. Evidentemente la tabla debe ser unica para
cada usuario ya que pueden existir varios usuarios introduciendo datos, y no
quiero que se mezclen entre si.

Saludos...



"Eladio Rincón" escribió en el mensaje
news:%
Juan,

has comentado que la tabla temporal la creas dentro del procedimiento
almacenado; este ejemplo reproduce lo que te sucede:

use northwind
go
drop proc proc_test
go
create proc proc_test
as
select * into #t from Orders
go

exec proc_test
select * from #t

tienes que tener en cuenta que cuando sales del ámbito de procedimiento
almacenado, la tabla temporal se destruye, por eso el error que se produce
en el select:

Server: Msg 208, Level 16, State 1, Line 4
Invalid object name '#t'.

por lo que veo en tu mensaje parece que quieres insertar datos en local


(sin
tener que acceder a SQL Server), y en un momento determinado "consolidar"
esos datos en el servidor, ¿es correcto? cuentanos un poco más del
proceso...


Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Juan Pedro Gonzalez" wrote in message
news:#
> Hola,
>
> Se me ha presentado un pequeño problema de desarrollo, os lo explico a
> continuacion para ver si alguien me puede hechar un cable.
>
> En un formulario de VB .NET tengo una serie de datos que debe


introducirse
> en una base de datos de SQL Server (en tres tablas). Me gustaria evitar


la
> corrupcion de los datos en el SQL Server, y existen problemas con la


red.
> Para solucionar este problema se me ocurrio emplear XML, pero algunos de
los
> datos son strings, y podrian enviar comillas produciendo errores en el
> XML... Por ello se me ocurrio crear un procedimiento que generase dos
tablas
> temporales (#primera y #segunda). Desde VB .NET trato de introducir los
> datos en dichas tablas temporales y una vez que todo ha sido realizado


sin
> errores llamo a un segundo procedimiento almacenado que copiara los


datos
de
> dichas tablas a las tablas reales.
>
> El problema se presenta con los INSERT del VB .NET, ya que cuando llamo


a
> #primera me dice que el nombre de la tabla no es valido. ¿Como se emplea
una
> tabla temporal desde VB .NET?
>
> Tambien me ha surgido otra duda: ¿Donde puedo ver la tabla temporal?
> Especialmente para poder observar si la tabla se ha generado
> correctamente... Yo pensaba que era en Tempdb pero no se puede ver


nada...
>
> Y ya puestos a preguntar... Los usuario se conectan a la base de datos
> empleando autenticacion SQL Server, y acceden a la base de datos a


traves
de
> un Rol de aplicacion. La Tabla temporal se genera para su login de


usuario
o
> para el rol de aplicacion? Supongo que sera para su login de usuario, ya
que
> es el que contendra la informacion de la sesion, y aparte de eso, si


acaba
> en TempDB dudo que coja el rol de aplicacion de la otra base de datos.
>
> Tambien me pregunto si la tabla temporal solo puede ser accedida por el
> usuario que la ha creado (No es una tabla temporal global), o si se
deberia
> aplicar algun tipo de seguridad adicional para evitar que otro usuario


la
> consulte.
>
> Un saludo
>
>


Respuesta Responder a este mensaje
#9 SqlRanger
26/02/2005 - 10:33 | Informe spam
Juan,

No creo que necesites usar tablas temporales para hacer lo que quieres. Con
usar transacciones sería suficiente. Toda la operación de inserción en las
tres tablas podrías hacerla en una única transacción, esto aseguraría que si
se produce un fallo en la red en mitad de la transacción, ninguna de las
modificaciones quedarían en la base de datos al deshacerse automáticamente
todo. Las transacciones son atómicas, esto quiere decir que o bien se
consolidan todas las modificaciones correspondientes a la transaccion o
ninguna en absoluto.

Saludos:

Jesús López
MVP



"Juan" escribió en el mensaje
news:#
A ver comento un poco mas el caso...

En principio en los datos se dividen entre tres tablas... El caso real


tiene
muchos matices, asi que para simplificarlo un poco pongamos que tenemos un
concesionario de coches, que es un caso mas rapido de comentar. Supongamos
que a nuestro concesionario nos llegan tres coches de un nuevo modelo.

Por un lado quiero inroducir los parametros que son comunes para todos
(TablaComun), Por otro lado quiero introducir los datos diferentes de cada
coche como el numero de bastidor, numero de motor, etc... La red me


presenta
un problema, ya que esta muy cargada, e incluso puedo tener caidas de red,
por lo tanto no quiero tocar las tablas reales del servidor para evitar


que
se puedan corromper los datos, o que no se agreguen todos los datos que
necesito.

Mi idea inicial era pasar los parametros comunes como parametros de un
procedimiento almaenado, y los detalles unicos para cada coche en un XML.


El
problema que me encuentro aqui es que en la descripcion de un coche pueden
emplear texto en plan 'es un coche "Pequeño".' y creo que esas comillas me
darian problemas con el XML.

La otra solucion que se me habia ocurrido es introducir todos los datos en
una tabla temporal del SQL Server, de tal forma que se vayan introduciendo
los datos, y si no se produce ningun error entonces llamaria a un
procedimiento almacenado con los datos comunes para todos los coches, y el
propio procedimiento se encrgaría de realizar un "SELECT INTO" para copiar
los datos a las tablas reales del servidor. Al tener todos estos datos
controlados por el procedimiento podria abrir una transaccion antes de la
operacion y realizar un rollback en el caso de que algo fallase,
asegurandome asi que los datos se han introducido correctamente.
Adicionalmente, podria sacar el Identificador para el modelo del coche y
añadirselo a cada uno de los coches que han llegado sin necesidad de


pasarle
esos datos poco a poco, con lo que lograria reducir la cantidad de datos


que
pasan por la red y evitaria congestionarla aun mas.

No se si me he explicado demasiado bien... Digamos que me interesa tener


los
datos en el servidor, pero que no sea en una de las tablas de trabajo sino
una intermedia... y que luego se introduzcan en la tabla correcta si
considero que todo ha ido bien. Evidentemente la tabla debe ser unica para
cada usuario ya que pueden existir varios usuarios introduciendo datos, y


no
quiero que se mezclen entre si.

Saludos...



"Eladio Rincón" escribió en el mensaje
news:%
> Juan,
>
> has comentado que la tabla temporal la creas dentro del procedimiento
> almacenado; este ejemplo reproduce lo que te sucede:
>
> use northwind
> go
> drop proc proc_test
> go
> create proc proc_test
> as
> select * into #t from Orders
> go
>
> exec proc_test
> select * from #t
>
> tienes que tener en cuenta que cuando sales del ámbito de procedimiento
> almacenado, la tabla temporal se destruye, por eso el error que se


produce
> en el select:
>
> Server: Msg 208, Level 16, State 1, Line 4
> Invalid object name '#t'.
>
> por lo que veo en tu mensaje parece que quieres insertar datos en local
(sin
> tener que acceder a SQL Server), y en un momento determinado


"consolidar"
> esos datos en el servidor, ¿es correcto? cuentanos un poco más del
> proceso...
>
>
> Eladio Rincón
> SQL Server MVP
>
> Solid Quality Learning (http://www.solidqualitylearning.com)
> "Comparte lo que sabes, aprende lo que no sepas", FGG
>
> Consulte el histórico del grupo en Google
> http://groups.google.com/groups?gro....sqlserver
>
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "Juan Pedro Gonzalez" wrote in message
> news:#
> > Hola,
> >
> > Se me ha presentado un pequeño problema de desarrollo, os lo explico a
> > continuacion para ver si alguien me puede hechar un cable.
> >
> > En un formulario de VB .NET tengo una serie de datos que debe
introducirse
> > en una base de datos de SQL Server (en tres tablas). Me gustaria


evitar
la
> > corrupcion de los datos en el SQL Server, y existen problemas con la
red.
> > Para solucionar este problema se me ocurrio emplear XML, pero algunos


de
> los
> > datos son strings, y podrian enviar comillas produciendo errores en el
> > XML... Por ello se me ocurrio crear un procedimiento que generase dos
> tablas
> > temporales (#primera y #segunda). Desde VB .NET trato de introducir


los
> > datos en dichas tablas temporales y una vez que todo ha sido realizado
sin
> > errores llamo a un segundo procedimiento almacenado que copiara los
datos
> de
> > dichas tablas a las tablas reales.
> >
> > El problema se presenta con los INSERT del VB .NET, ya que cuando


llamo
a
> > #primera me dice que el nombre de la tabla no es valido. ¿Como se


emplea
> una
> > tabla temporal desde VB .NET?
> >
> > Tambien me ha surgido otra duda: ¿Donde puedo ver la tabla temporal?
> > Especialmente para poder observar si la tabla se ha generado
> > correctamente... Yo pensaba que era en Tempdb pero no se puede ver
nada...
> >
> > Y ya puestos a preguntar... Los usuario se conectan a la base de datos
> > empleando autenticacion SQL Server, y acceden a la base de datos a
traves
> de
> > un Rol de aplicacion. La Tabla temporal se genera para su login de
usuario
> o
> > para el rol de aplicacion? Supongo que sera para su login de usuario,


ya
> que
> > es el que contendra la informacion de la sesion, y aparte de eso, si
acaba
> > en TempDB dudo que coja el rol de aplicacion de la otra base de datos.
> >
> > Tambien me pregunto si la tabla temporal solo puede ser accedida por


el
> > usuario que la ha creado (No es una tabla temporal global), o si se
> deberia
> > aplicar algun tipo de seguridad adicional para evitar que otro usuario
la
> > consulte.
> >
> > Un saludo
> >
> >
>
>


Respuesta Responder a este mensaje
#10 SqlRanger
26/02/2005 - 10:33 | Informe spam
Juan,

No creo que necesites usar tablas temporales para hacer lo que quieres. Con
usar transacciones sería suficiente. Toda la operación de inserción en las
tres tablas podrías hacerla en una única transacción, esto aseguraría que si
se produce un fallo en la red en mitad de la transacción, ninguna de las
modificaciones quedarían en la base de datos al deshacerse automáticamente
todo. Las transacciones son atómicas, esto quiere decir que o bien se
consolidan todas las modificaciones correspondientes a la transaccion o
ninguna en absoluto.

Saludos:

Jesús López
MVP



"Juan" escribió en el mensaje
news:#
A ver comento un poco mas el caso...

En principio en los datos se dividen entre tres tablas... El caso real


tiene
muchos matices, asi que para simplificarlo un poco pongamos que tenemos un
concesionario de coches, que es un caso mas rapido de comentar. Supongamos
que a nuestro concesionario nos llegan tres coches de un nuevo modelo.

Por un lado quiero inroducir los parametros que son comunes para todos
(TablaComun), Por otro lado quiero introducir los datos diferentes de cada
coche como el numero de bastidor, numero de motor, etc... La red me


presenta
un problema, ya que esta muy cargada, e incluso puedo tener caidas de red,
por lo tanto no quiero tocar las tablas reales del servidor para evitar


que
se puedan corromper los datos, o que no se agreguen todos los datos que
necesito.

Mi idea inicial era pasar los parametros comunes como parametros de un
procedimiento almaenado, y los detalles unicos para cada coche en un XML.


El
problema que me encuentro aqui es que en la descripcion de un coche pueden
emplear texto en plan 'es un coche "Pequeño".' y creo que esas comillas me
darian problemas con el XML.

La otra solucion que se me habia ocurrido es introducir todos los datos en
una tabla temporal del SQL Server, de tal forma que se vayan introduciendo
los datos, y si no se produce ningun error entonces llamaria a un
procedimiento almacenado con los datos comunes para todos los coches, y el
propio procedimiento se encrgaría de realizar un "SELECT INTO" para copiar
los datos a las tablas reales del servidor. Al tener todos estos datos
controlados por el procedimiento podria abrir una transaccion antes de la
operacion y realizar un rollback en el caso de que algo fallase,
asegurandome asi que los datos se han introducido correctamente.
Adicionalmente, podria sacar el Identificador para el modelo del coche y
añadirselo a cada uno de los coches que han llegado sin necesidad de


pasarle
esos datos poco a poco, con lo que lograria reducir la cantidad de datos


que
pasan por la red y evitaria congestionarla aun mas.

No se si me he explicado demasiado bien... Digamos que me interesa tener


los
datos en el servidor, pero que no sea en una de las tablas de trabajo sino
una intermedia... y que luego se introduzcan en la tabla correcta si
considero que todo ha ido bien. Evidentemente la tabla debe ser unica para
cada usuario ya que pueden existir varios usuarios introduciendo datos, y


no
quiero que se mezclen entre si.

Saludos...



"Eladio Rincón" escribió en el mensaje
news:%
> Juan,
>
> has comentado que la tabla temporal la creas dentro del procedimiento
> almacenado; este ejemplo reproduce lo que te sucede:
>
> use northwind
> go
> drop proc proc_test
> go
> create proc proc_test
> as
> select * into #t from Orders
> go
>
> exec proc_test
> select * from #t
>
> tienes que tener en cuenta que cuando sales del ámbito de procedimiento
> almacenado, la tabla temporal se destruye, por eso el error que se


produce
> en el select:
>
> Server: Msg 208, Level 16, State 1, Line 4
> Invalid object name '#t'.
>
> por lo que veo en tu mensaje parece que quieres insertar datos en local
(sin
> tener que acceder a SQL Server), y en un momento determinado


"consolidar"
> esos datos en el servidor, ¿es correcto? cuentanos un poco más del
> proceso...
>
>
> Eladio Rincón
> SQL Server MVP
>
> Solid Quality Learning (http://www.solidqualitylearning.com)
> "Comparte lo que sabes, aprende lo que no sepas", FGG
>
> Consulte el histórico del grupo en Google
> http://groups.google.com/groups?gro....sqlserver
>
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "Juan Pedro Gonzalez" wrote in message
> news:#
> > Hola,
> >
> > Se me ha presentado un pequeño problema de desarrollo, os lo explico a
> > continuacion para ver si alguien me puede hechar un cable.
> >
> > En un formulario de VB .NET tengo una serie de datos que debe
introducirse
> > en una base de datos de SQL Server (en tres tablas). Me gustaria


evitar
la
> > corrupcion de los datos en el SQL Server, y existen problemas con la
red.
> > Para solucionar este problema se me ocurrio emplear XML, pero algunos


de
> los
> > datos son strings, y podrian enviar comillas produciendo errores en el
> > XML... Por ello se me ocurrio crear un procedimiento que generase dos
> tablas
> > temporales (#primera y #segunda). Desde VB .NET trato de introducir


los
> > datos en dichas tablas temporales y una vez que todo ha sido realizado
sin
> > errores llamo a un segundo procedimiento almacenado que copiara los
datos
> de
> > dichas tablas a las tablas reales.
> >
> > El problema se presenta con los INSERT del VB .NET, ya que cuando


llamo
a
> > #primera me dice que el nombre de la tabla no es valido. ¿Como se


emplea
> una
> > tabla temporal desde VB .NET?
> >
> > Tambien me ha surgido otra duda: ¿Donde puedo ver la tabla temporal?
> > Especialmente para poder observar si la tabla se ha generado
> > correctamente... Yo pensaba que era en Tempdb pero no se puede ver
nada...
> >
> > Y ya puestos a preguntar... Los usuario se conectan a la base de datos
> > empleando autenticacion SQL Server, y acceden a la base de datos a
traves
> de
> > un Rol de aplicacion. La Tabla temporal se genera para su login de
usuario
> o
> > para el rol de aplicacion? Supongo que sera para su login de usuario,


ya
> que
> > es el que contendra la informacion de la sesion, y aparte de eso, si
acaba
> > en TempDB dudo que coja el rol de aplicacion de la otra base de datos.
> >
> > Tambien me pregunto si la tabla temporal solo puede ser accedida por


el
> > usuario que la ha creado (No es una tabla temporal global), o si se
> deberia
> > aplicar algun tipo de seguridad adicional para evitar que otro usuario
la
> > consulte.
> >
> > Un saludo
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida