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:

Mostrar la cita
#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ó:

Mostrar la cita
#3 Alejandro Mesa
27/09/2005 - 17:01 | Informe spam
Mostrar la cita
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:

Mostrar la cita
#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ó:

Mostrar la cita
#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:

Mostrar la cita
Ads by Google
Search Busqueda sugerida