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