problema con CAST y CONVERT

27/09/2005 - 15:37 por Arreglador | Informe spam
necesito hacer un cast de la columna "Importe_Fact" que es nvarchar en la
tabla, la necesito float para poder hacer operaciones con la cifra en un
stored procedure, pero cada vez que quiero convertirla ya sea con cast o
convert, me sale el error que detallo mas abajo, soy un poco nuevo en esto
asique quiza este haciendo algo mal con la sintaxis ya que la consulta la
guardo en @temp y luego la ejecuto en otro lado

SELECT @temp =N'SELECT @S2=SUM(' + convert(float,Importe_Fact) + N')
FROM ( SELECT etc


Error obtenido:
Servidor: mensaje 207, nivel 16, estado 3, línea 32
El nombre de columna 'Importe_Fact' no es válido.

cabe aclarar que pruebo poniendo antes el nombre de la tabla.columna pero
tampoco funciona no se que sera.

:-P

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
27/09/2005 - 15:56 | Informe spam
Te recomiendo cambiar el esquema de la tabla. No creo que sea buena idea
almacenar importes de factura usando varchar o nvarchar. tampoco te
recomiendo que conviertas esos valores a tipo float, puesto que este tipo de
datos es aproximado y SQL Server puede traer un valor diferente al que
inicialmente se almaceno en la tabla, especialmente los que terminan en .3,
.6 y .7.

Ejemplo:

declare @t table (c1 float)

insert into @t values(.3)

select * from @t
go

Debes usar el tipo de datos money o numeric, dependiendo de cuantos digitos
decimales necesitas.

Ejemplo:

select sum(cast(importe_fact as numeric(10, 2)))
from facturas

El error que te esta dando, no creo que este relacionado con la conversion,
sino mas bien con la cadena que estas armando. Para una mejor ayuda,
preferible que postees el valor de la cadena.

select @temp


AMB

"Arreglador" wrote:

necesito hacer un cast de la columna "Importe_Fact" que es nvarchar en la
tabla, la necesito float para poder hacer operaciones con la cifra en un
stored procedure, pero cada vez que quiero convertirla ya sea con cast o
convert, me sale el error que detallo mas abajo, soy un poco nuevo en esto
asique quiza este haciendo algo mal con la sintaxis ya que la consulta la
guardo en @temp y luego la ejecuto en otro lado

SELECT @temp =N'SELECT @S2=SUM(' + convert(float,Importe_Fact) + N')
FROM ( SELECT etc


Error obtenido:
Servidor: mensaje 207, nivel 16, estado 3, línea 32
El nombre de columna 'Importe_Fact' no es válido.

cabe aclarar que pruebo poniendo antes el nombre de la tabla.columna pero
tampoco funciona no se que sera.

:-P

Respuesta Responder a este mensaje
#2 Arreglador
27/09/2005 - 16:11 | Informe spam
el problema es que no tengo permiso para escribir o modificar la tabla, es un
stored procedure que debo hacer para el trabajo asique tengo que usar ese
campo como nvarchar tal como lo definio el que la hizo. si por mi fuera
es obvio que es una burrada poner como varchar un campo que tiene un importe
pero bueno
por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?


"Alejandro Mesa" escribió:

Te recomiendo cambiar el esquema de la tabla. No creo que sea buena idea
almacenar importes de factura usando varchar o nvarchar. tampoco te
recomiendo que conviertas esos valores a tipo float, puesto que este tipo de
datos es aproximado y SQL Server puede traer un valor diferente al que
inicialmente se almaceno en la tabla, especialmente los que terminan en .3,
.6 y .7.

Ejemplo:

declare @t table (c1 float)

insert into @t values(.3)

select * from @t
go

Debes usar el tipo de datos money o numeric, dependiendo de cuantos digitos
decimales necesitas.

Ejemplo:

select sum(cast(importe_fact as numeric(10, 2)))
from facturas

El error que te esta dando, no creo que este relacionado con la conversion,
sino mas bien con la cadena que estas armando. Para una mejor ayuda,
preferible que postees el valor de la cadena.

select @temp


AMB

"Arreglador" wrote:

> necesito hacer un cast de la columna "Importe_Fact" que es nvarchar en la
> tabla, la necesito float para poder hacer operaciones con la cifra en un
> stored procedure, pero cada vez que quiero convertirla ya sea con cast o
> convert, me sale el error que detallo mas abajo, soy un poco nuevo en esto
> asique quiza este haciendo algo mal con la sintaxis ya que la consulta la
> guardo en @temp y luego la ejecuto en otro lado
>
> SELECT @temp =N'SELECT @S2=SUM(' + convert(float,Importe_Fact) + N')
> FROM ( SELECT etc
>
>
> Error obtenido:
> Servidor: mensaje 207, nivel 16, estado 3, línea 32
> El nombre de columna 'Importe_Fact' no es válido.
>
> cabe aclarar que pruebo poniendo antes el nombre de la tabla.columna pero
> tampoco funciona no se que sera.
>
> :-P
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
27/09/2005 - 17:01 | Informe spam
por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?



Creo que no leistes el parrafo final. Puedes tratar:

select sum(cast(importe_fact as numeric(10, 4)))
from facturas

pero como mencione antes, el error que te da debe estar asociado a la
sentencia dinamica que estas armando. Puedes postear el valor de la variable
@temp?


AMB

"Arreglador" wrote:

el problema es que no tengo permiso para escribir o modificar la tabla, es un
stored procedure que debo hacer para el trabajo asique tengo que usar ese
campo como nvarchar tal como lo definio el que la hizo. si por mi fuera
es obvio que es una burrada poner como varchar un campo que tiene un importe
pero bueno
por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?


"Alejandro Mesa" escribió:

> Te recomiendo cambiar el esquema de la tabla. No creo que sea buena idea
> almacenar importes de factura usando varchar o nvarchar. tampoco te
> recomiendo que conviertas esos valores a tipo float, puesto que este tipo de
> datos es aproximado y SQL Server puede traer un valor diferente al que
> inicialmente se almaceno en la tabla, especialmente los que terminan en .3,
> .6 y .7.
>
> Ejemplo:
>
> declare @t table (c1 float)
>
> insert into @t values(.3)
>
> select * from @t
> go
>
> Debes usar el tipo de datos money o numeric, dependiendo de cuantos digitos
> decimales necesitas.
>
> Ejemplo:
>
> select sum(cast(importe_fact as numeric(10, 2)))
> from facturas
>
> El error que te esta dando, no creo que este relacionado con la conversion,
> sino mas bien con la cadena que estas armando. Para una mejor ayuda,
> preferible que postees el valor de la cadena.
>
> select @temp
>
>
> AMB
>
> "Arreglador" wrote:
>
> > necesito hacer un cast de la columna "Importe_Fact" que es nvarchar en la
> > tabla, la necesito float para poder hacer operaciones con la cifra en un
> > stored procedure, pero cada vez que quiero convertirla ya sea con cast o
> > convert, me sale el error que detallo mas abajo, soy un poco nuevo en esto
> > asique quiza este haciendo algo mal con la sintaxis ya que la consulta la
> > guardo en @temp y luego la ejecuto en otro lado
> >
> > SELECT @temp =N'SELECT @S2=SUM(' + convert(float,Importe_Fact) + N')
> > FROM ( SELECT etc
> >
> >
> > Error obtenido:
> > Servidor: mensaje 207, nivel 16, estado 3, línea 32
> > El nombre de columna 'Importe_Fact' no es válido.
> >
> > cabe aclarar que pruebo poniendo antes el nombre de la tabla.columna pero
> > tampoco funciona no se que sera.
> >
> > :-P
> >
Respuesta Responder a este mensaje
#4 Arreglador
27/09/2005 - 17:45 | Informe spam
temp seria:

SELECT @temp =N'SELECT @S2 = SUM('+cast(Importe_Fact as numeric(10,2))+N')
FROM ( SELECT TOP 50 *
FROM TransaccionesTC
WHERE (FechaCierre IS NULL)
ORDER BY Fecha_Pago, Hora_Pago)DERIVEDTBL'

el problema con todo ese codigo es que necesito sumar las primeras 50
operaciones de esa tabla, pero las primeras 50 cuando la tabla esta ordenada
por fecha de pago.

desde ya gracias por tu tiempo :-)

"Alejandro Mesa" escribió:

> por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?

Creo que no leistes el parrafo final. Puedes tratar:

select sum(cast(importe_fact as numeric(10, 4)))
from facturas

pero como mencione antes, el error que te da debe estar asociado a la
sentencia dinamica que estas armando. Puedes postear el valor de la variable
@temp?


AMB

"Arreglador" wrote:

> el problema es que no tengo permiso para escribir o modificar la tabla, es un
> stored procedure que debo hacer para el trabajo asique tengo que usar ese
> campo como nvarchar tal como lo definio el que la hizo. si por mi fuera
> es obvio que es una burrada poner como varchar un campo que tiene un importe
> pero bueno
> por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?
>
>
> "Alejandro Mesa" escribió:
>
> > Te recomiendo cambiar el esquema de la tabla. No creo que sea buena idea
> > almacenar importes de factura usando varchar o nvarchar. tampoco te
> > recomiendo que conviertas esos valores a tipo float, puesto que este tipo de
> > datos es aproximado y SQL Server puede traer un valor diferente al que
> > inicialmente se almaceno en la tabla, especialmente los que terminan en .3,
> > .6 y .7.
> >
> > Ejemplo:
> >
> > declare @t table (c1 float)
> >
> > insert into @t values(.3)
> >
> > select * from @t
> > go
> >
> > Debes usar el tipo de datos money o numeric, dependiendo de cuantos digitos
> > decimales necesitas.
> >
> > Ejemplo:
> >
> > select sum(cast(importe_fact as numeric(10, 2)))
> > from facturas
> >
> > El error que te esta dando, no creo que este relacionado con la conversion,
> > sino mas bien con la cadena que estas armando. Para una mejor ayuda,
> > preferible que postees el valor de la cadena.
> >
> > select @temp
> >
> >
> > AMB
> >
> > "Arreglador" wrote:
> >
> > > necesito hacer un cast de la columna "Importe_Fact" que es nvarchar en la
> > > tabla, la necesito float para poder hacer operaciones con la cifra en un
> > > stored procedure, pero cada vez que quiero convertirla ya sea con cast o
> > > convert, me sale el error que detallo mas abajo, soy un poco nuevo en esto
> > > asique quiza este haciendo algo mal con la sintaxis ya que la consulta la
> > > guardo en @temp y luego la ejecuto en otro lado
> > >
> > > SELECT @temp =N'SELECT @S2=SUM(' + convert(float,Importe_Fact) + N')
> > > FROM ( SELECT etc
> > >
> > >
> > > Error obtenido:
> > > Servidor: mensaje 207, nivel 16, estado 3, línea 32
> > > El nombre de columna 'Importe_Fact' no es válido.
> > >
> > > cabe aclarar que pruebo poniendo antes el nombre de la tabla.columna pero
> > > tampoco funciona no se que sera.
> > >
> > > :-P
> > >
Respuesta Responder a este mensaje
#5 Alejandro Mesa
27/09/2005 - 19:36 | Informe spam
Trata:

SELECT @temp =N'SELECT @S2 = SUM(cast(Importe_Fact as numeric(10,2)))
FROM ( SELECT TOP 50 *
FROM TransaccionesTC
WHERE (FechaCierre IS NULL)
ORDER BY Fecha_Pago, Hora_Pago)DERIVEDTBL'


AMB

"Arreglador" wrote:

temp seria:

SELECT @temp =N'SELECT @S2 = SUM('+cast(Importe_Fact as numeric(10,2))+N')
FROM ( SELECT TOP 50 *
FROM TransaccionesTC
WHERE (FechaCierre IS NULL)
ORDER BY Fecha_Pago, Hora_Pago)DERIVEDTBL'

el problema con todo ese codigo es que necesito sumar las primeras 50
operaciones de esa tabla, pero las primeras 50 cuando la tabla esta ordenada
por fecha de pago.

desde ya gracias por tu tiempo :-)

"Alejandro Mesa" escribió:

> > por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?
>
> Creo que no leistes el parrafo final. Puedes tratar:
>
> select sum(cast(importe_fact as numeric(10, 4)))
> from facturas
>
> pero como mencione antes, el error que te da debe estar asociado a la
> sentencia dinamica que estas armando. Puedes postear el valor de la variable
> @temp?
>
>
> AMB
>
> "Arreglador" wrote:
>
> > el problema es que no tengo permiso para escribir o modificar la tabla, es un
> > stored procedure que debo hacer para el trabajo asique tengo que usar ese
> > campo como nvarchar tal como lo definio el que la hizo. si por mi fuera
> > es obvio que es una burrada poner como varchar un campo que tiene un importe
> > pero bueno
> > por eso, hay alguna forma de solucionar eso sin tener que cambiar la tabla?
> >
> >
> > "Alejandro Mesa" escribió:
> >
> > > Te recomiendo cambiar el esquema de la tabla. No creo que sea buena idea
> > > almacenar importes de factura usando varchar o nvarchar. tampoco te
> > > recomiendo que conviertas esos valores a tipo float, puesto que este tipo de
> > > datos es aproximado y SQL Server puede traer un valor diferente al que
> > > inicialmente se almaceno en la tabla, especialmente los que terminan en .3,
> > > .6 y .7.
> > >
> > > Ejemplo:
> > >
> > > declare @t table (c1 float)
> > >
> > > insert into @t values(.3)
> > >
> > > select * from @t
> > > go
> > >
> > > Debes usar el tipo de datos money o numeric, dependiendo de cuantos digitos
> > > decimales necesitas.
> > >
> > > Ejemplo:
> > >
> > > select sum(cast(importe_fact as numeric(10, 2)))
> > > from facturas
> > >
> > > El error que te esta dando, no creo que este relacionado con la conversion,
> > > sino mas bien con la cadena que estas armando. Para una mejor ayuda,
> > > preferible que postees el valor de la cadena.
> > >
> > > select @temp
> > >
> > >
> > > AMB
> > >
> > > "Arreglador" wrote:
> > >
> > > > necesito hacer un cast de la columna "Importe_Fact" que es nvarchar en la
> > > > tabla, la necesito float para poder hacer operaciones con la cifra en un
> > > > stored procedure, pero cada vez que quiero convertirla ya sea con cast o
> > > > convert, me sale el error que detallo mas abajo, soy un poco nuevo en esto
> > > > asique quiza este haciendo algo mal con la sintaxis ya que la consulta la
> > > > guardo en @temp y luego la ejecuto en otro lado
> > > >
> > > > SELECT @temp =N'SELECT @S2=SUM(' + convert(float,Importe_Fact) + N')
> > > > FROM ( SELECT etc
> > > >
> > > >
> > > > Error obtenido:
> > > > Servidor: mensaje 207, nivel 16, estado 3, línea 32
> > > > El nombre de columna 'Importe_Fact' no es válido.
> > > >
> > > > cabe aclarar que pruebo poniendo antes el nombre de la tabla.columna pero
> > > > tampoco funciona no se que sera.
> > > >
> > > > :-P
> > > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida