problemas adicionando columnas con el analizador de consultas

08/01/2004 - 00:56 por Avgvstvs | Informe spam
El problema es el siguiente estoy creando columnas en una tabla temporal
mediante la clausula:
alter table #tab_1 add col_1

y posteriormente ingreso valores a la columna, lo cual se ejecuta
correctamente, pero posteriormente en el mismo procedimiento almacenado
deseo llamar la columna directamente con el siguiente select:

select col_1 from #tab_1

y me reporta el siguiente error:

Servidor: mensaje 207, nivel 16, estado 3, procedimiento ProcPrueba,
línea 10
El nombre de columna 'col_1' no es válido.

pero cuando lo llamo mediante el select * from #tab_1 si me aparecen todas
las columnas de la tabla incluyendo col_1 correctamente.

El problema es que necesito asignar el valor de la columna en una variable y
la clausula select que utilizo para ello no la acepta el SQL con el error
descrito anteriormente.

Para mejor ilustración de mi caso pueden correr el siguiente código:

create procedure _prueba
as
select 'dato1', '1'
go

create table #AA (col_1 varchar(10))
alter table #AA add [col_2] varchar(10) null
insert into #AA execute _prueba
/*
Si se ejecuta la siguiente clausula select si funciona:
select * from #AA
*/

select col_2 from #AA
go

drop table #AA
drop procedure _prueba
go

Preguntas similare

Leer las respuestas

#16 Miguel Egea
08/01/2004 - 19:31 | Informe spam
No uses tabla globales o quizá cuando otro usuario corra el mismo proceso
des un error.

Saludos
Miguel Egea
"Avgvstvs" escribió en el mensaje
news:#
Adrián la solución planteada me funciona perfectamente porque la tabla
temporal solo me mandará los datos de validación a la página asp y puedo
amarrar fácilmente el nombre de la temporal global con el número de la
sesión de asp, y lo mejor de todo es que no tengo que cambiar los
procedimientos almacenados en los caules me baso.

Muchas Gracias a todos por su colaboración, fue de gran utilidad.

Augusto Romero Arango

"Adrian Garcia" escribió en el mensaje
news:
> Podrias utilizar una tabla temporal global pero armando el nombre de tal
> forma de que sea unico para cada usuario.
> Ahora me imagino que esta solucion va a signifcar una gran reingenieria


en
> tus procedimientos almacenados.
>
> Saludos
> Adrian D. Garcia
> NDSoft
>
> "Avgvstvs" wrote in message
> news:%
> > La idea está buena, pero cuando ejecuto la creación de la tabla


temporal
> > desde el procedimiento almacenado mediante la cláusula de ejecutar la
> cadena
> > de texto la tabla no queda disponible dentro del procedimiento
almacenado
> > para poder llamar campos de ella, porque sale el error
> >
> > El nombre de objeto '#tabla' no es válido.
> >
> > Si en vez de crear la tabla como una tabla temporal local (#tabla),


la
> creo
> > como temporal global (##tabla), el procedimiento queda funcionando,


pero
> > teniendo en cuenta que mi aplicación es multiususario y se corre
mediante
> un
> > asp y varias personas podrán estar operando al tiempo la misma opción
me
> da
> > miedo utilizar la temporal global porque podría generar problemas


entre
> los
> > usuarios.
> >
> > Alguna idea adicional?
> >
> > Gracias
> >
> > Augsuto Romero Arango
> >
> > "Maximiliano Damian Accotto"


<maxi_accotto[arroba]speedy.com.ar.SACAME>
> > escribió en el mensaje news:
> > > bueno podrias hacer algo asi entonces:
> > >
> > > declare @cond int
> > > declare @sql1 nvarchar(4000)
> > > declare @sql2 nvarchar (4000)
> > > set @cond=1
> > >
> > > set @sql1='nada'
> > >
> > > if @cond = 1
> > > begin
> > > set @sql1 = N' create table #tabla (col_1 varchar(10), col_2
int)'
> > > end
> > > else
> > > begin
> > > set @sql1 = N' create table #tabla (col_1 varchar(10))'
> > > end
> > >
> > > if @sql1 <> 'nada'
> > > begin
> > > exec (@sql1)
> > > end
> > >
> > > Salu2
> > >
> > >
> > > Maximiliano Damian Accotto
> > >
> > >
> > > "Avgvstvs" escribió en el mensaje
> > > news:
> > > > Depenediendo de una condición la tabla debe llevar 2 campos o 5
> campos.
> > > >
> > > > El tamaño y órden de las columnas es escencial para mi porque las
> tablas
> > > se
> > > > van a llenar mediante el select que devuelve un procedimiento
> > almacenado.
> > > >
> > > > mi tabla inicial tiene 2 columnas, pero si la condición hace que
tenga
> > que
> > > > usar el procedimiento almacenado que devuelve 5 campos debo
> adicionarle
> > > las
> > > > columnas que me faltan para que las llene. Por eso intenté hacer


la
> > > creación
> > > > de la tabla selectiva mediante el condicional como lo mostré en el
> > ejemplo
> > > > del correo anterior, pero el SQL dice que la tabla ya está creada,
sin
> > > > verificar el condicional.
> > > >
> > > > Gracias de antemano por estar pendiente de mi caso, y espero haber
> > podido
> > > > explicarme mejor.
> > > >
> > > > Augusto Romero Arango
> > > >
> > > > "Maximiliano Damian Accotto"
> <maxi_accotto[arroba]speedy.com.ar.SACAME>
> > > > escribió en el mensaje
news:O%
> > > > > hmmmm, a ver lo que no entiendo es una cosa si me la explicas:
> > > > >
> > > > > Vos generas primero una tabla si? y luego le agregas una


columna?
> > porque
> > > > > haces esto y no directamente en la generacion de la tabla poner
> todo?
> > > > >
> > > > > Salu2
> > > > >
> > > > > Maximiliano Damian Accotto
> > > > >
> > > > >
> > > > > "Avgvstvs" escribió en el mensaje
> > > > > news:
> > > > > > Gracias, por la respuesta, pero tengo el problema que el


código
> > > expuesto
> > > > > lo
> > > > > > estoy corriendo dentro de un procedimiento almacenado y la
> > instrucción
> > > > GO
> > > > > se
> > > > > > aplica para el alter procedure y no para el alter table. El
> problema
> > > si
> > > > no
> > > > > > estoy mal es como si el sql no actualizara internamente la
> > estructura
> > > de
> > > > > la
> > > > > > tabla temporal después de la instrucción alter table, estoy en
lo
> > > > > correcto?
> > > > > >
> > > > > > También probé mediante un condicional crear la tabla temporal
con
> > los
> > > > > campos
> > > > > > que necesito, como lo demuestra el siguiente código:
> > > > > >
> > > > > > declare @cond int
> > > > > > set @cond=1
> > > > > >
> > > > > > if @cond=1
> > > > > > create table #tabla (col_1 varchar(10), col_2 int)
> > > > > > else
> > > > > > create table #tabla (col_1 varchar(10))
> > > > > >
> > > > > > Pero al parecer el sql hace caso omiso de la estructura de
> > > programación
> > > > y
> > > > > > muestra el siguiente error:
> > > > > > Ya hay un objeto con el nombre '#tabla' en la base de


datos.
> > > > > >
> > > > > > Tienen alguna otra pista con la que me puedan ayudar?
> > > > > > "Maximiliano Damian Accotto"

> > > > escribió
> > > > > > en el mensaje news:
> > > > > > > hola, mira yo lo hice asi y me funciono a la perfeccion.
> > > > > > >
> > > > > > > create table #pepe (col_1 varchar(10))
> > > > > > > go
> > > > > > > alter table #pepe add [col_2] varchar(10) null
> > > > > > > go
> > > > > > >
> > > > > > > select [col_2] from #pepe
> > > > > > > go
> > > > > > >
> > > > > > >
> > > > > > > Salu2 enormes
> > > > > > >
> > > > > > > Maximiliano Damian Accotto
> > > > > > >
> > > > > > > Fundicion San Cayetano S.A.
> > > > > > > Gerente de IT
> > > > > > > Buenos Aires - Argentina
> > > > > > > -
> > > > > > > Desarrollador 3 estrellas
> > > > > > >
> > > > >
> > >
>


http://www.microsoft.com/spanish/ms...efault.asp
> > > > > > > -
> > > > > > > (maxi_accotto[arroba]speedy.com.ar)
> > > > > > > MSN:
> > > > > > > "Avgvstvs" escribió en el mensaje
> > > > > > > news:
> > > > > > > > El problema es el siguiente estoy creando columnas en una
> tabla
> > > > > temporal
> > > > > > > > mediante la clausula:
> > > > > > > > alter table #tab_1 add col_1
> > > > > > > >
> > > > > > > > y posteriormente ingreso valores a la columna, lo cual se
> > ejecuta
> > > > > > > > correctamente, pero posteriormente en el mismo


procedimiento
> > > > > almacenado
> > > > > > > > deseo llamar la columna directamente con el siguiente
select:
> > > > > > > >
> > > > > > > > select col_1 from #tab_1
> > > > > > > >
> > > > > > > > y me reporta el siguiente error:
> > > > > > > >
> > > > > > > > Servidor: mensaje 207, nivel 16, estado 3,


procedimiento
> > > > > ProcPrueba,
> > > > > > > > línea 10
> > > > > > > > El nombre de columna 'col_1' no es válido.
> > > > > > > >
> > > > > > > > pero cuando lo llamo mediante el select * from #tab_1 si


me
> > > aparecen
> > > > > > todas
> > > > > > > > las columnas de la tabla incluyendo col_1 correctamente.
> > > > > > > >
> > > > > > > > El problema es que necesito asignar el valor de la columna
en
> > una
> > > > > > variable
> > > > > > > y
> > > > > > > > la clausula select que utilizo para ello no la acepta el


SQL
> con
> > > el
> > > > > > error
> > > > > > > > descrito anteriormente.
> > > > > > > >
> > > > > > > > Para mejor ilustración de mi caso pueden correr el


siguiente
> > > código:
> > > > > > > >
> > > > > > > > create procedure _prueba
> > > > > > > > as
> > > > > > > > select 'dato1', '1'
> > > > > > > > go
> > > > > > > >
> > > > > > > > create table #AA (col_1 varchar(10))
> > > > > > > > alter table #AA add [col_2] varchar(10) null
> > > > > > > > insert into #AA execute _prueba
> > > > > > > > /*
> > > > > > > > Si se ejecuta la siguiente clausula select si funciona:
> > > > > > > > select * from #AA
> > > > > > > > */
> > > > > > > >
> > > > > > > > select col_2 from #AA
> > > > > > > > go
> > > > > > > >
> > > > > > > > drop table #AA
> > > > > > > > drop procedure _prueba
> > > > > > > > go
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#17 Avgvstvs
08/01/2004 - 19:52 | Informe spam
la tabla global la crearé con un número úncio generado por la sesión del
asp, para asegurar que no se repita la creación de ella.


"Miguel Egea" escribió en el mensaje
news:
No uses tabla globales o quizá cuando otro usuario corra el mismo proceso
des un error.

Saludos
Miguel Egea
"Avgvstvs" escribió en el mensaje
news:#
> Adrián la solución planteada me funciona perfectamente porque la tabla
> temporal solo me mandará los datos de validación a la página asp y puedo
> amarrar fácilmente el nombre de la temporal global con el número de la
> sesión de asp, y lo mejor de todo es que no tengo que cambiar los
> procedimientos almacenados en los caules me baso.
>
> Muchas Gracias a todos por su colaboración, fue de gran utilidad.
>
> Augusto Romero Arango
>
> "Adrian Garcia" escribió en el mensaje
> news:
> > Podrias utilizar una tabla temporal global pero armando el nombre de


tal
> > forma de que sea unico para cada usuario.
> > Ahora me imagino que esta solucion va a signifcar una gran


reingenieria
en
> > tus procedimientos almacenados.
> >
> > Saludos
> > Adrian D. Garcia
> > NDSoft
> >
> > "Avgvstvs" wrote in message
> > news:%
> > > La idea está buena, pero cuando ejecuto la creación de la tabla
temporal
> > > desde el procedimiento almacenado mediante la cláusula de ejecutar


la
> > cadena
> > > de texto la tabla no queda disponible dentro del procedimiento
> almacenado
> > > para poder llamar campos de ella, porque sale el error
> > >
> > > El nombre de objeto '#tabla' no es válido.
> > >
> > > Si en vez de crear la tabla como una tabla temporal local (#tabla),
la
> > creo
> > > como temporal global (##tabla), el procedimiento queda funcionando,
pero
> > > teniendo en cuenta que mi aplicación es multiususario y se corre
> mediante
> > un
> > > asp y varias personas podrán estar operando al tiempo la misma


opción
> me
> > da
> > > miedo utilizar la temporal global porque podría generar problemas
entre
> > los
> > > usuarios.
> > >
> > > Alguna idea adicional?
> > >
> > > Gracias
> > >
> > > Augsuto Romero Arango
> > >
> > > "Maximiliano Damian Accotto"
<maxi_accotto[arroba]speedy.com.ar.SACAME>
> > > escribió en el mensaje news:
> > > > bueno podrias hacer algo asi entonces:
> > > >
> > > > declare @cond int
> > > > declare @sql1 nvarchar(4000)
> > > > declare @sql2 nvarchar (4000)
> > > > set @cond=1
> > > >
> > > > set @sql1='nada'
> > > >
> > > > if @cond = 1
> > > > begin
> > > > set @sql1 = N' create table #tabla (col_1 varchar(10), col_2
> int)'
> > > > end
> > > > else
> > > > begin
> > > > set @sql1 = N' create table #tabla (col_1 varchar(10))'
> > > > end
> > > >
> > > > if @sql1 <> 'nada'
> > > > begin
> > > > exec (@sql1)
> > > > end
> > > >
> > > > Salu2
> > > >
> > > >
> > > > Maximiliano Damian Accotto
> > > >
> > > >
> > > > "Avgvstvs" escribió en el mensaje
> > > > news:
> > > > > Depenediendo de una condición la tabla debe llevar 2 campos o 5
> > campos.
> > > > >
> > > > > El tamaño y órden de las columnas es escencial para mi porque


las
> > tablas
> > > > se
> > > > > van a llenar mediante el select que devuelve un procedimiento
> > > almacenado.
> > > > >
> > > > > mi tabla inicial tiene 2 columnas, pero si la condición hace que
> tenga
> > > que
> > > > > usar el procedimiento almacenado que devuelve 5 campos debo
> > adicionarle
> > > > las
> > > > > columnas que me faltan para que las llene. Por eso intenté hacer
la
> > > > creación
> > > > > de la tabla selectiva mediante el condicional como lo mostré en


el
> > > ejemplo
> > > > > del correo anterior, pero el SQL dice que la tabla ya está


creada,
> sin
> > > > > verificar el condicional.
> > > > >
> > > > > Gracias de antemano por estar pendiente de mi caso, y espero


haber
> > > podido
> > > > > explicarme mejor.
> > > > >
> > > > > Augusto Romero Arango
> > > > >
> > > > > "Maximiliano Damian Accotto"
> > <maxi_accotto[arroba]speedy.com.ar.SACAME>
> > > > > escribió en el mensaje
> news:O%
> > > > > > hmmmm, a ver lo que no entiendo es una cosa si me la explicas:
> > > > > >
> > > > > > Vos generas primero una tabla si? y luego le agregas una
columna?
> > > porque
> > > > > > haces esto y no directamente en la generacion de la tabla


poner
> > todo?
> > > > > >
> > > > > > Salu2
> > > > > >
> > > > > > Maximiliano Damian Accotto
> > > > > >
> > > > > >
> > > > > > "Avgvstvs" escribió en el mensaje
> > > > > > news:
> > > > > > > Gracias, por la respuesta, pero tengo el problema que el
código
> > > > expuesto
> > > > > > lo
> > > > > > > estoy corriendo dentro de un procedimiento almacenado y la
> > > instrucción
> > > > > GO
> > > > > > se
> > > > > > > aplica para el alter procedure y no para el alter table. El
> > problema
> > > > si
> > > > > no
> > > > > > > estoy mal es como si el sql no actualizara internamente la
> > > estructura
> > > > de
> > > > > > la
> > > > > > > tabla temporal después de la instrucción alter table, estoy


en
> lo
> > > > > > correcto?
> > > > > > >
> > > > > > > También probé mediante un condicional crear la tabla


temporal
> con
> > > los
> > > > > > campos
> > > > > > > que necesito, como lo demuestra el siguiente código:
> > > > > > >
> > > > > > > declare @cond int
> > > > > > > set @cond=1
> > > > > > >
> > > > > > > if @cond=1
> > > > > > > create table #tabla (col_1 varchar(10), col_2 int)
> > > > > > > else
> > > > > > > create table #tabla (col_1 varchar(10))
> > > > > > >
> > > > > > > Pero al parecer el sql hace caso omiso de la estructura de
> > > > programación
> > > > > y
> > > > > > > muestra el siguiente error:
> > > > > > > Ya hay un objeto con el nombre '#tabla' en la base de
datos.
> > > > > > >
> > > > > > > Tienen alguna otra pista con la que me puedan ayudar?
> > > > > > > "Maximiliano Damian Accotto"
>
> > > > > escribió
> > > > > > > en el mensaje news:
> > > > > > > > hola, mira yo lo hice asi y me funciono a la perfeccion.
> > > > > > > >
> > > > > > > > create table #pepe (col_1 varchar(10))
> > > > > > > > go
> > > > > > > > alter table #pepe add [col_2] varchar(10) null
> > > > > > > > go
> > > > > > > >
> > > > > > > > select [col_2] from #pepe
> > > > > > > > go
> > > > > > > >
> > > > > > > >
> > > > > > > > Salu2 enormes
> > > > > > > >
> > > > > > > > Maximiliano Damian Accotto
> > > > > > > >
> > > > > > > > Fundicion San Cayetano S.A.
> > > > > > > > Gerente de IT
> > > > > > > > Buenos Aires - Argentina
> > > > > > > > -
> > > > > > > > Desarrollador 3 estrellas
> > > > > > > >
> > > > > >
> > > >
> >
http://www.microsoft.com/spanish/ms...efault.asp
> > > > > > > > -
> > > > > > > > (maxi_accotto[arroba]speedy.com.ar)
> > > > > > > > MSN:
> > > > > > > > "Avgvstvs" escribió en el mensaje
> > > > > > > > news:
> > > > > > > > > El problema es el siguiente estoy creando columnas en


una
> > tabla
> > > > > > temporal
> > > > > > > > > mediante la clausula:
> > > > > > > > > alter table #tab_1 add col_1
> > > > > > > > >
> > > > > > > > > y posteriormente ingreso valores a la columna, lo cual


se
> > > ejecuta
> > > > > > > > > correctamente, pero posteriormente en el mismo
procedimiento
> > > > > > almacenado
> > > > > > > > > deseo llamar la columna directamente con el siguiente
> select:
> > > > > > > > >
> > > > > > > > > select col_1 from #tab_1
> > > > > > > > >
> > > > > > > > > y me reporta el siguiente error:
> > > > > > > > >
> > > > > > > > > Servidor: mensaje 207, nivel 16, estado 3,
procedimiento
> > > > > > ProcPrueba,
> > > > > > > > > línea 10
> > > > > > > > > El nombre de columna 'col_1' no es válido.
> > > > > > > > >
> > > > > > > > > pero cuando lo llamo mediante el select * from #tab_1 si
me
> > > > aparecen
> > > > > > > todas
> > > > > > > > > las columnas de la tabla incluyendo col_1 correctamente.
> > > > > > > > >
> > > > > > > > > El problema es que necesito asignar el valor de la


columna
> en
> > > una
> > > > > > > variable
> > > > > > > > y
> > > > > > > > > la clausula select que utilizo para ello no la acepta el
SQL
> > con
> > > > el
> > > > > > > error
> > > > > > > > > descrito anteriormente.
> > > > > > > > >
> > > > > > > > > Para mejor ilustración de mi caso pueden correr el
siguiente
> > > > código:
> > > > > > > > >
> > > > > > > > > create procedure _prueba
> > > > > > > > > as
> > > > > > > > > select 'dato1', '1'
> > > > > > > > > go
> > > > > > > > >
> > > > > > > > > create table #AA (col_1 varchar(10))
> > > > > > > > > alter table #AA add [col_2] varchar(10) null
> > > > > > > > > insert into #AA execute _prueba
> > > > > > > > > /*
> > > > > > > > > Si se ejecuta la siguiente clausula select si funciona:
> > > > > > > > > select * from #AA
> > > > > > > > > */
> > > > > > > > >
> > > > > > > > > select col_2 from #AA
> > > > > > > > > go
> > > > > > > > >
> > > > > > > > > drop table #AA
> > > > > > > > > drop procedure _prueba
> > > > > > > > > go
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#18 Avgvstvs
08/01/2004 - 20:10 | Informe spam
Miguel, no funciona si la temporal es local, me tocó utilizar una tabla
temporal global dentro del procedimiento almacenado, para que después de
crearla mediante la ejecución dinámica me quedara disponible para la
consulta.

AR

"Miguel Egea" escribió en el mensaje
news:
bueno, no queda más que usar ejecuci`´on dinámia (no he leido todo el ido


en
detalle), pero así upede solventarse
declare @cond int
set @cond=1
Create table #tabla(col_1 varchar(10))
if @cond=1
exec('Alter table #tabla add col_2 int')
select * from #tabla

Saludos
Miguel Egea
"Avgvstvs" escribió en el mensaje
news:
> Gracias, por la respuesta, pero tengo el problema que el código expuesto
lo
> estoy corriendo dentro de un procedimiento almacenado y la instrucción


GO
se
> aplica para el alter procedure y no para el alter table. El problema si


no
> estoy mal es como si el sql no actualizara internamente la estructura de
la
> tabla temporal después de la instrucción alter table, estoy en lo
correcto?
>
> También probé mediante un condicional crear la tabla temporal con los
campos
> que necesito, como lo demuestra el siguiente código:
>
> declare @cond int
> set @cond=1
>
> if @cond=1
> create table #tabla (col_1 varchar(10), col_2 int)
> else
> create table #tabla (col_1 varchar(10))
>
> Pero al parecer el sql hace caso omiso de la estructura de programación


y
> muestra el siguiente error:
> Ya hay un objeto con el nombre '#tabla' en la base de datos.
>
> Tienen alguna otra pista con la que me puedan ayudar?
>
>
> "Adrian Garcia" escribió en el mensaje
> news:
> > El problema se encuentra aqui:
> >
> > > create table #AA (col_1 varchar(10))
> > > alter table #AA add [col_2] varchar(10) null
> > > insert into #AA execute _prueba
> >
> > Tienes un CREATE TABLA seguido de un ALTER TABLE.
> > Para que funcione correctamente debes hacer esto
> >
> > > create table #AA (col_1 varchar(10))
> > > alter table #AA add [col_2] varchar(10) null
> > GO
> >
> > > insert into #AA execute _prueba
> >
> > Insertar el comando GO despues del ALTER TABLE
> >
> > Saludos
> >
> > Adrian D. Garcia
> > NDSoft
> >
> > "Avgvstvs" wrote in message
> > news:
> > > El problema es el siguiente estoy creando columnas en una tabla
temporal
> > > mediante la clausula:
> > > alter table #tab_1 add col_1
> > >
> > > y posteriormente ingreso valores a la columna, lo cual se ejecuta
> > > correctamente, pero posteriormente en el mismo procedimiento
almacenado
> > > deseo llamar la columna directamente con el siguiente select:
> > >
> > > select col_1 from #tab_1
> > >
> > > y me reporta el siguiente error:
> > >
> > > Servidor: mensaje 207, nivel 16, estado 3, procedimiento
ProcPrueba,
> > > línea 10
> > > El nombre de columna 'col_1' no es válido.
> > >
> > > pero cuando lo llamo mediante el select * from #tab_1 si me aparecen
> todas
> > > las columnas de la tabla incluyendo col_1 correctamente.
> > >
> > > El problema es que necesito asignar el valor de la columna en una
> variable
> > y
> > > la clausula select que utilizo para ello no la acepta el SQL con el
> error
> > > descrito anteriormente.
> > >
> > > Para mejor ilustración de mi caso pueden correr el siguiente código:
> > >
> > > create procedure _prueba
> > > as
> > > select 'dato1', '1'
> > > go
> > >
> > > create table #AA (col_1 varchar(10))
> > > alter table #AA add [col_2] varchar(10) null
> > > insert into #AA execute _prueba
> > > /*
> > > Si se ejecuta la siguiente clausula select si funciona:
> > > select * from #AA
> > > */
> > >
> > > select col_2 from #AA
> > > go
> > >
> > > drop table #AA
> > > drop procedure _prueba
> > > go
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#19 Avgvstvs
08/01/2004 - 21:41 | Informe spam
No solucioné nada con la tabla temporal global. volví a retomar el problema
desde la raiz, es decir el problema que el sql no encontraba la columna que
creaba mediante la clausula:
create table #tabla add col_1 int,

cuando la llamaba luego desde: select col_1 from #tabla.

Lo que hice fue análogo a este ejemplo:

create table #tabla (col_1 int)
alter table #tabla add col_2 int

insert into #tabla (col_1, col_2)
values 1, 2

select * into #tabla1 from #tabla
declare @var1 int
set @var1=(select col_2 from #tabla1)

cosa que no podía hacer directamente sobre #tabla ej: select col_2 from
#tabla , ya que salía el error que no encontraba la columna llamada col_2 en
el objeto #tabla.

Creo que ahora si el caso está cerrado y reitero mis agradecimientos por el
apoyo recibido.

Augusto Romero Arango

"Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME>
escribió en el mensaje news:%
Si esa solucion de Adrian es piola si y solo si se logean cada usuario con
un User_id y no todos con el mismo, cosa que no deberia existir, per hay
gente que arma sus sistemas y los logea siempre por ej con SA.

pd: no molestas para nada y cuando quieras podes volver a preguntar que


con
mucho gusto si esta dentro de mi conocimiento te ayudare.

Salu2

Maximiliano Damian Accotto


"Avgvstvs" escribió en el mensaje
news:%
> Maximiliano, el problema se hubiera solucionado desde el pricipio si el
> stored procedure creara su propia tabla sin que a mi me tocara utilizar


la
> cláusula create table, si esto es posible se solucionó mi problema. Creo
que
> no lo es.
>
> Con respecto a crear las instrucciones "create" mediante cadenas de


texto
y
> ejecutarlas luego, Adrián García me dió una respuesta de poner un
> identificador de la sesión del usuario al nombre de la tabla para no


tener
> problemas de duplicidad de objetos.
>
> Muchísimas gracias Maximiliano por la ayuda brindada, ya creo poder
> solucionar mi problema sin necesidad de molestarlos más!
>
> Augusto Romero Arango
>
>
> "Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME>
> escribió en el mensaje news:
> > A ver vamos nuevamente:
> >
> > os tenes una tabla no temporal que queres llenar por un Store? eso es


lo
> que
> > buscas?
> >
> > porque no miras esto:
> >
> >
> > create table temp1 (id char(100))
> > go
> >
> > create proc maxi_b as
> > select 'pepe'
> > go
> >
> > insert into temp1 exec maxi_b
> >
> > Salu2
> > Maximiliano Damian Accotto
> >
> >
> > "Avgvstvs" escribió en el mensaje
> > news:
> > > Depenediendo de una condición la tabla debe llevar 2 campos o 5
campos.
> > >
> > > El tamaño y órden de las columnas es escencial para mi porque las
tablas
> > se
> > > van a llenar mediante el select que devuelve un procedimiento
> almacenado.
> > >
> > > mi tabla inicial tiene 2 columnas, pero si la condición hace que


tenga
> que
> > > usar el procedimiento almacenado que devuelve 5 campos debo
adicionarle
> > las
> > > columnas que me faltan para que las llene. Por eso intenté hacer la
> > creación
> > > de la tabla selectiva mediante el condicional como lo mostré en el
> ejemplo
> > > del correo anterior, pero el SQL dice que la tabla ya está creada,


sin
> > > verificar el condicional.
> > >
> > > Gracias de antemano por estar pendiente de mi caso, y espero haber
> podido
> > > explicarme mejor.
> > >
> > > Augusto Romero Arango
> > >
> > > "Maximiliano Damian Accotto"
<maxi_accotto[arroba]speedy.com.ar.SACAME>
> > > escribió en el mensaje


news:O%
> > > > hmmmm, a ver lo que no entiendo es una cosa si me la explicas:
> > > >
> > > > Vos generas primero una tabla si? y luego le agregas una columna?
> porque
> > > > haces esto y no directamente en la generacion de la tabla poner
todo?
> > > >
> > > > Salu2
> > > >
> > > > Maximiliano Damian Accotto
> > > >
> > > >
> > > > "Avgvstvs" escribió en el mensaje
> > > > news:
> > > > > Gracias, por la respuesta, pero tengo el problema que el código
> > expuesto
> > > > lo
> > > > > estoy corriendo dentro de un procedimiento almacenado y la
> instrucción
> > > GO
> > > > se
> > > > > aplica para el alter procedure y no para el alter table. El
problema
> > si
> > > no
> > > > > estoy mal es como si el sql no actualizara internamente la
> estructura
> > de
> > > > la
> > > > > tabla temporal después de la instrucción alter table, estoy en


lo
> > > > correcto?
> > > > >
> > > > > También probé mediante un condicional crear la tabla temporal


con
> los
> > > > campos
> > > > > que necesito, como lo demuestra el siguiente código:
> > > > >
> > > > > declare @cond int
> > > > > set @cond=1
> > > > >
> > > > > if @cond=1
> > > > > create table #tabla (col_1 varchar(10), col_2 int)
> > > > > else
> > > > > create table #tabla (col_1 varchar(10))
> > > > >
> > > > > Pero al parecer el sql hace caso omiso de la estructura de
> > programación
> > > y
> > > > > muestra el siguiente error:
> > > > > Ya hay un objeto con el nombre '#tabla' en la base de datos.
> > > > >
> > > > > Tienen alguna otra pista con la que me puedan ayudar?
> > > > > "Maximiliano Damian Accotto"



> > > escribió
> > > > > en el mensaje news:
> > > > > > hola, mira yo lo hice asi y me funciono a la perfeccion.
> > > > > >
> > > > > > create table #pepe (col_1 varchar(10))
> > > > > > go
> > > > > > alter table #pepe add [col_2] varchar(10) null
> > > > > > go
> > > > > >
> > > > > > select [col_2] from #pepe
> > > > > > go
> > > > > >
> > > > > >
> > > > > > Salu2 enormes
> > > > > >
> > > > > > Maximiliano Damian Accotto
> > > > > >
> > > > > > Fundicion San Cayetano S.A.
> > > > > > Gerente de IT
> > > > > > Buenos Aires - Argentina
> > > > > > -
> > > > > > Desarrollador 3 estrellas
> > > > > >
> > > >
> >
http://www.microsoft.com/spanish/ms...efault.asp
> > > > > > -
> > > > > > (maxi_accotto[arroba]speedy.com.ar)
> > > > > > MSN:
> > > > > > "Avgvstvs" escribió en el mensaje
> > > > > > news:
> > > > > > > El problema es el siguiente estoy creando columnas en una
tabla
> > > > temporal
> > > > > > > mediante la clausula:
> > > > > > > alter table #tab_1 add col_1
> > > > > > >
> > > > > > > y posteriormente ingreso valores a la columna, lo cual se
> ejecuta
> > > > > > > correctamente, pero posteriormente en el mismo procedimiento
> > > > almacenado
> > > > > > > deseo llamar la columna directamente con el siguiente


select:
> > > > > > >
> > > > > > > select col_1 from #tab_1
> > > > > > >
> > > > > > > y me reporta el siguiente error:
> > > > > > >
> > > > > > > Servidor: mensaje 207, nivel 16, estado 3, procedimiento
> > > > ProcPrueba,
> > > > > > > línea 10
> > > > > > > El nombre de columna 'col_1' no es válido.
> > > > > > >
> > > > > > > pero cuando lo llamo mediante el select * from #tab_1 si me
> > aparecen
> > > > > todas
> > > > > > > las columnas de la tabla incluyendo col_1 correctamente.
> > > > > > >
> > > > > > > El problema es que necesito asignar el valor de la columna


en
> una
> > > > > variable
> > > > > > y
> > > > > > > la clausula select que utilizo para ello no la acepta el SQL
con
> > el
> > > > > error
> > > > > > > descrito anteriormente.
> > > > > > >
> > > > > > > Para mejor ilustración de mi caso pueden correr el siguiente
> > código:
> > > > > > >
> > > > > > > create procedure _prueba
> > > > > > > as
> > > > > > > select 'dato1', '1'
> > > > > > > go
> > > > > > >
> > > > > > > create table #AA (col_1 varchar(10))
> > > > > > > alter table #AA add [col_2] varchar(10) null
> > > > > > > insert into #AA execute _prueba
> > > > > > > /*
> > > > > > > Si se ejecuta la siguiente clausula select si funciona:
> > > > > > > select * from #AA
> > > > > > > */
> > > > > > >
> > > > > > > select col_2 from #AA
> > > > > > > go
> > > > > > >
> > > > > > > drop table #AA
> > > > > > > drop procedure _prueba
> > > > > > > go
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#20 Adrian Garcia
08/01/2004 - 22:16 | Informe spam
Podrias utilizar una tabla temporal global pero armando el nombre de tal
forma de que sea unico para cada usuario.
Ahora me imagino que esta solucion va a signifcar una gran reingenieria en
tus procedimientos almacenados.

Saludos
Adrian D. Garcia
NDSoft

"Avgvstvs" wrote in message
news:%
La idea está buena, pero cuando ejecuto la creación de la tabla temporal
desde el procedimiento almacenado mediante la cláusula de ejecutar la


cadena
de texto la tabla no queda disponible dentro del procedimiento almacenado
para poder llamar campos de ella, porque sale el error

El nombre de objeto '#tabla' no es válido.

Si en vez de crear la tabla como una tabla temporal local (#tabla), la


creo
como temporal global (##tabla), el procedimiento queda funcionando, pero
teniendo en cuenta que mi aplicación es multiususario y se corre mediante


un
asp y varias personas podrán estar operando al tiempo la misma opción me


da
miedo utilizar la temporal global porque podría generar problemas entre


los
usuarios.

Alguna idea adicional?

Gracias

Augsuto Romero Arango

"Maximiliano Damian Accotto" <maxi_accotto[arroba]speedy.com.ar.SACAME>
escribió en el mensaje news:
> bueno podrias hacer algo asi entonces:
>
> declare @cond int
> declare @sql1 nvarchar(4000)
> declare @sql2 nvarchar (4000)
> set @cond=1
>
> set @sql1='nada'
>
> if @cond = 1
> begin
> set @sql1 = N' create table #tabla (col_1 varchar(10), col_2 int)'
> end
> else
> begin
> set @sql1 = N' create table #tabla (col_1 varchar(10))'
> end
>
> if @sql1 <> 'nada'
> begin
> exec (@sql1)
> end
>
> Salu2
>
>
> Maximiliano Damian Accotto
>
>
> "Avgvstvs" escribió en el mensaje
> news:
> > Depenediendo de una condición la tabla debe llevar 2 campos o 5


campos.
> >
> > El tamaño y órden de las columnas es escencial para mi porque las


tablas
> se
> > van a llenar mediante el select que devuelve un procedimiento
almacenado.
> >
> > mi tabla inicial tiene 2 columnas, pero si la condición hace que tenga
que
> > usar el procedimiento almacenado que devuelve 5 campos debo


adicionarle
> las
> > columnas que me faltan para que las llene. Por eso intenté hacer la
> creación
> > de la tabla selectiva mediante el condicional como lo mostré en el
ejemplo
> > del correo anterior, pero el SQL dice que la tabla ya está creada, sin
> > verificar el condicional.
> >
> > Gracias de antemano por estar pendiente de mi caso, y espero haber
podido
> > explicarme mejor.
> >
> > Augusto Romero Arango
> >
> > "Maximiliano Damian Accotto"


<maxi_accotto[arroba]speedy.com.ar.SACAME>
> > escribió en el mensaje news:O%
> > > hmmmm, a ver lo que no entiendo es una cosa si me la explicas:
> > >
> > > Vos generas primero una tabla si? y luego le agregas una columna?
porque
> > > haces esto y no directamente en la generacion de la tabla poner


todo?
> > >
> > > Salu2
> > >
> > > Maximiliano Damian Accotto
> > >
> > >
> > > "Avgvstvs" escribió en el mensaje
> > > news:
> > > > Gracias, por la respuesta, pero tengo el problema que el código
> expuesto
> > > lo
> > > > estoy corriendo dentro de un procedimiento almacenado y la
instrucción
> > GO
> > > se
> > > > aplica para el alter procedure y no para el alter table. El


problema
> si
> > no
> > > > estoy mal es como si el sql no actualizara internamente la
estructura
> de
> > > la
> > > > tabla temporal después de la instrucción alter table, estoy en lo
> > > correcto?
> > > >
> > > > También probé mediante un condicional crear la tabla temporal con
los
> > > campos
> > > > que necesito, como lo demuestra el siguiente código:
> > > >
> > > > declare @cond int
> > > > set @cond=1
> > > >
> > > > if @cond=1
> > > > create table #tabla (col_1 varchar(10), col_2 int)
> > > > else
> > > > create table #tabla (col_1 varchar(10))
> > > >
> > > > Pero al parecer el sql hace caso omiso de la estructura de
> programación
> > y
> > > > muestra el siguiente error:
> > > > Ya hay un objeto con el nombre '#tabla' en la base de datos.
> > > >
> > > > Tienen alguna otra pista con la que me puedan ayudar?
> > > > "Maximiliano Damian Accotto"
> > escribió
> > > > en el mensaje news:
> > > > > hola, mira yo lo hice asi y me funciono a la perfeccion.
> > > > >
> > > > > create table #pepe (col_1 varchar(10))
> > > > > go
> > > > > alter table #pepe add [col_2] varchar(10) null
> > > > > go
> > > > >
> > > > > select [col_2] from #pepe
> > > > > go
> > > > >
> > > > >
> > > > > Salu2 enormes
> > > > >
> > > > > Maximiliano Damian Accotto
> > > > >
> > > > > Fundicion San Cayetano S.A.
> > > > > Gerente de IT
> > > > > Buenos Aires - Argentina
> > > > > -
> > > > > Desarrollador 3 estrellas
> > > > >
> > >
>


http://www.microsoft.com/spanish/ms...efault.asp
> > > > > -
> > > > > (maxi_accotto[arroba]speedy.com.ar)
> > > > > MSN:
> > > > > "Avgvstvs" escribió en el mensaje
> > > > > news:
> > > > > > El problema es el siguiente estoy creando columnas en una


tabla
> > > temporal
> > > > > > mediante la clausula:
> > > > > > alter table #tab_1 add col_1
> > > > > >
> > > > > > y posteriormente ingreso valores a la columna, lo cual se
ejecuta
> > > > > > correctamente, pero posteriormente en el mismo procedimiento
> > > almacenado
> > > > > > deseo llamar la columna directamente con el siguiente select:
> > > > > >
> > > > > > select col_1 from #tab_1
> > > > > >
> > > > > > y me reporta el siguiente error:
> > > > > >
> > > > > > Servidor: mensaje 207, nivel 16, estado 3, procedimiento
> > > ProcPrueba,
> > > > > > línea 10
> > > > > > El nombre de columna 'col_1' no es válido.
> > > > > >
> > > > > > pero cuando lo llamo mediante el select * from #tab_1 si me
> aparecen
> > > > todas
> > > > > > las columnas de la tabla incluyendo col_1 correctamente.
> > > > > >
> > > > > > El problema es que necesito asignar el valor de la columna en
una
> > > > variable
> > > > > y
> > > > > > la clausula select que utilizo para ello no la acepta el SQL


con
> el
> > > > error
> > > > > > descrito anteriormente.
> > > > > >
> > > > > > Para mejor ilustración de mi caso pueden correr el siguiente
> código:
> > > > > >
> > > > > > create procedure _prueba
> > > > > > as
> > > > > > select 'dato1', '1'
> > > > > > go
> > > > > >
> > > > > > create table #AA (col_1 varchar(10))
> > > > > > alter table #AA add [col_2] varchar(10) null
> > > > > > insert into #AA execute _prueba
> > > > > > /*
> > > > > > Si se ejecuta la siguiente clausula select si funciona:
> > > > > > select * from #AA
> > > > > > */
> > > > > >
> > > > > > select col_2 from #AA
> > > > > > go
> > > > > >
> > > > > > drop table #AA
> > > > > > drop procedure _prueba
> > > > > > go
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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