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

#6 Avgvstvs
08/01/2004 - 15:09 | Informe spam
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
#7 Maximiliano Damian Accotto
08/01/2004 - 15:31 | Informe spam
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
#8 Avgvstvs
08/01/2004 - 16:06 | Informe spam
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
#9 Manuel Etcheto
08/01/2004 - 16:09 | Informe spam
Buenas
disculpa, pero creo que podrías utilizar SELECT INTO para
despreocuparte de las columnas

O una UDF con un parámetro @condicion que te devuelva la
tabla que corresponda a la condición dada

Espero te sirva
Salu2
Manuel

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...esarrollad
or/default.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
#10 Avgvstvs
08/01/2004 - 16:33 | Informe spam
¿Cuál es la sintaxis para hacer un select into si los datos provienen de un
procedimiento almacenado?, intenté hacerlo y lo estuve buscando en los BOL
pero nada encontré. Por eso opté por hacer la creación de las tablas
selectivamente dependiendo del condicional.

Con respecto a las función definida por el usuario me tocaría volver a
plasmar los procedimientos que tengo en funciones, ya que las funciones no
permiten que internamente se ejecuten procedimientos almacenados. Hacer esto
desde mi puto de vista sería ineficiente, ya que los procedimientos
almacenados que tengo son cada uno largos y un poco complejos.

Gracias

Augusto Romero Arango


"Manuel Etcheto" escribió en el
mensaje news:0bff01c3d5f9$6426e730$
Buenas
disculpa, pero creo que podrías utilizar SELECT INTO para
despreocuparte de las columnas

O una UDF con un parámetro @condicion que te devuelva la
tabla que corresponda a la condición dada

Espero te sirva
Salu2
Manuel

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...esarrollad
or/default.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