Problema en consulta auxilio

22/09/2008 - 06:28 por Edgar Brito | Informe spam
Tengo un procedimeinto con parametros que no puedo ejecutar por favor
ayudenme es el siguiente:

alter procedure dbo.PAAlumnosNormales
(
@area nvarchar(1)=0,
@Grado nvarchar(1)=0,
@Ciclo nvarchar(1)=0,
@Folio nvarchar(10)=0
)
as
declare @sql1 as nvarchar(50),
@sql2 as nvarchar(50),
@sql3 as nvarchar(50),
@sql4 as nvarchar(50)

if (@area=0)
set @sql1= ' [area]>0'
else
set @sql1= ' [area]=' + @area


if (@grado=0)
set @sql2= ' [grado]>0'
else
set @sql2= ' [grado]=' + @Grado

if (@Ciclo =0)
set @sql3= ' dbo.[cuotas colegiaturas].[idciclo]>0'
else
set @sql3= ' dbo.[cuotas colegiaturas].[idciclo]=' + @ciclo
if (@folio =0)
set @sql4= ' [folio]>0'
else
set @sql4= ' and [folio]=' + @folio

print @sql1
print @sql2
print @sql3
print @sql4

begin
SELECT UPPER(dbo.Alumnos.[Apellido Paterno] + ' ' + dbo.Alumnos.[Apellido
Materno] + ' ' + dbo.Alumnos.[Nombre(s)]) AS Alumno,
dbo.Alumnos.[Ficha Alumno], dbo.Alumnos.[Apellido Paterno],
dbo.Alumnos.[Apellido Materno], dbo.Alumnos.[Nombre(s)], dbo.Alumnos.curp,
dbo.Alumnos.Idciclo, dbo.Alumnos.idgrupo, dbo.Alumnos.nacionalidad,
dbo.Alumnos.sexo, dbo.Alumnos.Fechadenacimiento, dbo.Alumnos.edad,
dbo.Alumnos.[lugar de nacimiento], dbo.Alumnos.[No de hermanos
Inscritos], dbo.Alumnos.[escuela donde procede],
dbo.Alumnos.escuelaciudaddeprocedencia,
dbo.Alumnos.escuelaprocedenciatelefono,
dbo.Alumnos.escuelaprocecenciaincorporada,
dbo.Alumnos.escuelaprocedenciapromedio,
dbo.Alumnos.escuelaprocedenciaIdiomaCursado, dbo.Alumnos.[Porcentaje de
Beca],
dbo.Alumnos.[Meses de Colegiatura], dbo.Alumnos.status,
dbo.Alumnos.Tipodealumno, dbo.Alumnos.Idcuota, dbo.Alumnos.foto,
dbo.Alumnos.CuotaInscripcion, dbo.Alumnos.AntiguedadEnColegio,
dbo.Alumnos.upsize_ts, dbo.Alumnos.IdTutor, dbo.Alumnos.AlumnoViveCon,
dbo.Alumnos.IDAlumno, dbo.Alumnos.Tipodealumno AS tipo,
UPPER(ISNULL(dbo.padres.[Calle y Numero], '') + ' ' +
ISNULL(dbo.padres.Colonia, ''))
AS Domicilio, UPPER(ISNULL(dbo.padres.Ciudad, '') + ', ' +
ISNULL(dbo.Estados.nombre, '')) AS cd, dbo.[Cuotas Colegiaturas].Area,
dbo.[Cuotas Colegiaturas].Grado, dbo.[Cuotas
Colegiaturas].CoutaInscripcion, dbo.[Cuotas Colegiaturas].primermes,
dbo.[Cuotas Colegiaturas].[1erColegiaturasePaga], dbo.[Cuotas
Colegiaturas].colegiatura, dbo.Areas.Nombre AS AreaNombre,
STR(dbo.[Cuotas Colegiaturas].Grado) + 'º de ' + dbo.Areas.Nombre AS
GradoArea, dbo.Areas.idarea
FROM dbo.[Cuotas Colegiaturas] INNER JOIN
dbo.Areas ON dbo.[Cuotas Colegiaturas].Area = dbo.Areas.idarea RIGHT
OUTER JOIN
dbo.Alumnos ON dbo.[Cuotas Colegiaturas].idcuota = dbo.Alumnos.Idcuota
LEFT OUTER JOIN
dbo.Estados RIGHT OUTER JOIN
dbo.padres ON dbo.Estados.IDestado = dbo.padres.Estado ON
dbo.Alumnos.IdTutor = dbo.padres.IDTutor
WHERE dbo.Alumnos.Tipodealumno = 'Normal' and @sql1 --and @sql2 and @sql3
and @sql4
ORDER BY Alumno
end



el problema está en el where cuando lo pongo sin parametros ejemplo: WHERE
dbo.Alumnos.Tipodealumno = 'Normal' and [area]=1

funciona perfectamente, pero si lo pongo:
WHERE dbo.Alumnos.Tipodealumno = 'Normal' and @sql1

donde el parametro @sql1 es igual a uno

el error que me manda al querer compilarlo es el siguiente

Mens 4145, Nivel 15, Estado 1, Procedimiento PAAlumnosNormales, Línea 66
Se especificó una expresión no booleana en un contexto donde se esperaba una
condición, cerca de 'ORDER'.

gracias por el apoyo
 

Leer las respuestas

#1 Juan Diego Bueno
22/09/2008 - 09:58 | Informe spam
Buenas Edgar:

En un mensaje anterior, Edgar Brito ha escrito :
Tengo un procedimeinto con parametros que no puedo ejecutar por favor
ayudenme es el siguiente:

alter procedure dbo.PAAlumnosNormales
(
@area nvarchar(1)=0,
@Grado nvarchar(1)=0,
@Ciclo nvarchar(1)=0,
@Folio nvarchar(10)=0
)
as
declare @sql1 as nvarchar(50),
@sql2 as nvarchar(50),
@sql3 as nvarchar(50),
@sql4 as nvarchar(50)

if (@area=0)
set @sql1= ' [area]>0'
else
set @sql1= ' [area]=' + @area


if (@grado=0)
set @sql2= ' [grado]>0'
else
set @sql2= ' [grado]=' + @Grado

if (@Ciclo =0)
set @sql3= ' dbo.[cuotas colegiaturas].[idciclo]>0'
else
set @sql3= ' dbo.[cuotas colegiaturas].[idciclo]=' + @ciclo
if (@folio =0)
set @sql4= ' [folio]>0'
else
set @sql4= ' and [folio]=' + @folio

print @sql1
print @sql2
print @sql3
print @sql4

begin
SELECT UPPER(dbo.Alumnos.[Apellido Paterno] + ' ' + dbo.Alumnos.[Apellido
Materno] + ' ' + dbo.Alumnos.[Nombre(s)]) AS Alumno,
dbo.Alumnos.[Ficha Alumno], dbo.Alumnos.[Apellido Paterno],
dbo.Alumnos.[Apellido Materno], dbo.Alumnos.[Nombre(s)], dbo.Alumnos.curp,
dbo.Alumnos.Idciclo, dbo.Alumnos.idgrupo, dbo.Alumnos.nacionalidad,
dbo.Alumnos.sexo, dbo.Alumnos.Fechadenacimiento, dbo.Alumnos.edad,
dbo.Alumnos.[lugar de nacimiento], dbo.Alumnos.[No de hermanos
Inscritos], dbo.Alumnos.[escuela donde procede],
dbo.Alumnos.escuelaciudaddeprocedencia,
dbo.Alumnos.escuelaprocedenciatelefono,
dbo.Alumnos.escuelaprocecenciaincorporada,
dbo.Alumnos.escuelaprocedenciapromedio,
dbo.Alumnos.escuelaprocedenciaIdiomaCursado, dbo.Alumnos.[Porcentaje de
Beca],
dbo.Alumnos.[Meses de Colegiatura], dbo.Alumnos.status,
dbo.Alumnos.Tipodealumno, dbo.Alumnos.Idcuota, dbo.Alumnos.foto,
dbo.Alumnos.CuotaInscripcion, dbo.Alumnos.AntiguedadEnColegio,
dbo.Alumnos.upsize_ts, dbo.Alumnos.IdTutor, dbo.Alumnos.AlumnoViveCon,
dbo.Alumnos.IDAlumno, dbo.Alumnos.Tipodealumno AS tipo,
UPPER(ISNULL(dbo.padres.[Calle y Numero], '') + ' ' +
ISNULL(dbo.padres.Colonia, ''))
AS Domicilio, UPPER(ISNULL(dbo.padres.Ciudad, '') + ', ' +
ISNULL(dbo.Estados.nombre, '')) AS cd, dbo.[Cuotas Colegiaturas].Area,
dbo.[Cuotas Colegiaturas].Grado, dbo.[Cuotas
Colegiaturas].CoutaInscripcion, dbo.[Cuotas Colegiaturas].primermes,
dbo.[Cuotas Colegiaturas].[1erColegiaturasePaga], dbo.[Cuotas
Colegiaturas].colegiatura, dbo.Areas.Nombre AS AreaNombre,
STR(dbo.[Cuotas Colegiaturas].Grado) + 'º de ' + dbo.Areas.Nombre AS
GradoArea, dbo.Areas.idarea
FROM dbo.[Cuotas Colegiaturas] INNER JOIN
dbo.Areas ON dbo.[Cuotas Colegiaturas].Area = dbo.Areas.idarea RIGHT
OUTER JOIN
dbo.Alumnos ON dbo.[Cuotas Colegiaturas].idcuota = dbo.Alumnos.Idcuota
LEFT OUTER JOIN
dbo.Estados RIGHT OUTER JOIN
dbo.padres ON dbo.Estados.IDestado = dbo.padres.Estado ON
dbo.Alumnos.IdTutor = dbo.padres.IDTutor
WHERE dbo.Alumnos.Tipodealumno = 'Normal' and @sql1 --and @sql2 and @sql3
and @sql4
ORDER BY Alumno
end



el problema está en el where cuando lo pongo sin parametros ejemplo: WHERE
dbo.Alumnos.Tipodealumno = 'Normal' and [area]=1

funciona perfectamente, pero si lo pongo:
WHERE dbo.Alumnos.Tipodealumno = 'Normal' and @sql1

donde el parametro @sql1 es igual a uno

el error que me manda al querer compilarlo es el siguiente

Mens 4145, Nivel 15, Estado 1, Procedimiento PAAlumnosNormales, Línea 66
Se especificó una expresión no booleana en un contexto donde se esperaba una
condición, cerca de 'ORDER'.

gracias por el apoyo



Los parámetros @sql1, etc no pueden servir para construir consultas
dinámicas, sólo para asignar valores. Es decir, no puedes hacer un
@sql1='[area]=1' porque no te lo va a ejecutar, salvo que uses sql
dinámico y tampoco sería exactamente así. En este caso, lo correcto
sería [area]=@sql1

La opción que tienes es crear una consulta dinámica y por ende, los
parámetros con sus nombres podrían crearse en tiempo de ejecución.

Revisa sp_executesql en los libros en pantalla

Saludos

http://www.moondance.es

Preguntas similares