sql >> Base de Datos >  >> RDS >> Sqlserver

Declaración condicional en consulta sql en la página ASP clásica

En VBScript puede usar el símbolo de y comercial (&) para concatenar cadenas. Prueba esto:

strSqlData="select * from MyTable where gender='male'" 

if AcademicYear <> "" then 
strSqlData= strSqlData & " and AcademicYear=" & AcademicYear
end if

if Batch <> "" then
strSqlData= strSqlData & " and Batch=" & Batch    
end if  

if School <> "" then 
strSqlData= strSqlData & " and School=" & School
end if  

Tiene tres cláusulas "y" separadas para agregar a su consulta sql. Las declaraciones condicionales son independientes entre sí, por lo que no debería usar elseif que es para diferentes opciones dentro de una sola declaración condicional. Es más sencillo verificar si una cadena no está vacía o no if stringname <> "" que usar len , (y dudo que sus declaraciones condicionales funcionen porque parece estar usando una letra minúscula "o" donde debería usar un cero)

Es muy fácil cometer errores cuando ensambla consultas SQL como esta. En las pruebas, a menudo vale la pena agregar una línea como Response.Write strSqlData antes de intentar ejecutarlo para comprobar que la consulta es lo que pretendía

Sin embargo, como han sugerido otros comentarios, su código es vulnerable a un ataque de inyección SQL. URL que contienen ".asp?" casi se puede garantizar que será golpeado por un ataque de tipo ASPROX tarde o temprano. Las consultas parametrizadas son la mejor manera de protegerse contra esto, pero un enfoque rápido si los valores de la cadena de consulta son todos numéricos es usar cint() - por ejemplo

strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)

Esto arrojará un error de discrepancia de tipo si la cadena de consulta contiene algo más que números, y el script fallará antes de intentar ejecutar su consulta sql.