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 

 

 

Responder a