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

#11 Maximiliano Damian Accotto
08/01/2004 - 17:11 | Informe spam
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
#12 Avgvstvs
08/01/2004 - 17:43 | Informe spam
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
#13 Avgvstvs
08/01/2004 - 17:46 | Informe spam
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
#14 Maximiliano Damian Accotto
08/01/2004 - 18:17 | Informe spam
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
#15 Miguel Egea
08/01/2004 - 19:30 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida