Hola!,
Porque no evitas usar los varchar y haciendo un SUBSTRING dejas solo la
parte numerica
Algo asi:
ALTER PROCEDURE [dbo].[ReporteListadoProveedores]
(
@CodigoDesde varchar(10) ,
@CodigoHasta varchar(10) ,
@SortBy int
)
DECLARE @Desde INT
DECLARE @Hasta INT
SET @Desde = CAST (SUBSTR(@CodigoDesde, 4) as INT)
SET @Hasta = CAST (SUBSTR(@CodigoHasta, 4) as INT)
EXEC (
SELECT ProveedorCodigo,
CAST (SUBSTR(ProveedorCodigo, 4) as INT) as codigo_int, --
PARA DEJAR SOLO LOS NUMEROS
...
FROM Proveedor p
...
WHERE codigo_int BETWEEN +
CAST(@Desde AS VARCHAR) + AND +
CAST(@Hasta AS VARCHAR) )
Espero que te funcione...
Saludos!
_____
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of The Developer
Sent: Domingo, 04 de Febrero de 2007 21:55
To: Diego Jancic
Subject: [dbms] filtrar por rango...
Hola Gente
Estoy teniendo problemas al hacer un SP que filtra por rangos de codigo
el problema en cuestion es que tengo una tabla cuyas claves son
alfanumericas ( Varchars )y tengo que filtrar por rangos (por ejemplo todos
aquellos proveedores que esten entre "pro0001" y "pro0023" )
La consulta la creo dinamicamente , al parecer el problema esta en que
cuando le paso los parametros no me los toma como varchar sino como un
simbolo cualquiera
me tira errores del estilo:
Mens. 207, Nivel 16, Estado 1, Línea 17
Invalid column name 'pro00001'.
Mens. 207, Nivel 16, Estado 1, Línea 17
Invalid column name 'pro00003'.
LA consulta la armo de la siguiente manera:
ALTER PROCEDURE [dbo].[ReporteListadoProveedores]
(
@CodigoDesde varchar(10) ,
@CodigoHasta varchar(10) ,
@SortBy int
)
AS
--obtener los parametros y armar e ejecutar la query de acuerdo a ello
Declare @SQLQuery VarChar(8000)
Declare @from VarChar(1000)
Declare @Where VarChar(1000)
Declare @Sort VarChar(1000)
set @Where = ''
set @Sort = ''
--para probarlo
--exec ReporteListadoProveedores @CodigoDesde = '1' , @CodigoHasta = '1' ,
@SortBy = 2
select @from ='SELECT Proveedor.ProveedorCodigo AS cod_proveedor
,Proveedor.ProveedorRazonSocial AS razon_social
,Localidad.LocalidadNombre AS localidad
,Provincia.ProvinciaNombre AS provincia
,1223 AS cod_postal
,Proveedor.ProveedorTelefono AS telefono
,Domicilio.DomicilioFax AS tel_fax
,CategoriaIva.CategoriaIvaCodigo AS cod_iva
,CategoriaIva.CategoriaIvaDescripcion AS desc_iva
,Proveedor.ProveedorCUIT AS cuit
FROM Proveedor LEFT OUTER JOIN
Domicilio ON Proveedor.DomicilioId = Domicilio.DomicilioId LEFT OUTER JOIN
Localidad ON Domicilio.LocalidadId = localidad.LocalidadId LEFT OUTER JOIN
Provincia ON localidad.ProvinciaID = Provincia.ProvinciaID LEFT OUTER JOIN
CategoriaIva ON Proveedor.CategoriaIvaId = CategoriaIva.CategoriaIvaID'
--setear la condicion del where
IF @CodigoDesde <> '0'
BEGIN
--Print 'entro 1'
IF @CodigoHasta IS NOT NULL
BEGIN
--Print 'entro 2'
select @Where = ' WHERE Proveedor.ProveedorCodigo BETWEEN '+
'CAST('[EMAIL PROTECTED]' AS varchar(10))' + ' AND '+ 'CAST('[EMAIL PROTECTED]
+'AS
varchar(10)) '
END
END
--setear el orden
IF @SortBy = 1
BEGIN
Select @Sort = ' ORDER BY Proveedor.ProveedorCodigo DESC'
END
ELSE
BEGIN
Select @Sort = ' ORDER BY Proveedor.ProveedorRazonSocial DESC'
END
--TODO
--falta el codigo postal en la tabla domicilio y ponerlo para que se arme
bien en la consulta
--armar la consulta
select @SQLQuery = @from + @Where + @Sort
--solo para testear
Print @SQLQuery
--ejecutar la consulta
Exec (@SQLQuery)
Si alguien alguna ves hizo algo parecido y me puede dar una mano lo
agradecere !
Desda ya gracias !
Saludos
Julian