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