Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Instrução condicional na consulta sql na página ASP clássica


Em VBScript você pode usar o símbolo e comercial (&) para concatenar strings. Tente isto:
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  

Você tem três cláusulas "e" separadas para anexar à sua consulta sql. As instruções condicionais são independentes umas das outras, então você não deve usar elseif que é para diferentes opções dentro de uma única instrução condicional. É mais simples verificar se uma string não está vazia if stringname <> "" do que usar len , (e duvido que suas declarações condicionais funcionem porque você parece estar usando uma letra minúscula "o" onde deveria estar usando um zero)

É muito fácil cometer erros quando você está montando consultas sql como esta. Em testes, geralmente vale a pena adicionar uma linha como Response.Write strSqlData antes de tentar executá-lo para verificar se a consulta é o que você pretendia

Como outros comentários sugeriram, porém, seu código é vulnerável a um ataque de injeção de SQL. URLs que contêm ".asp?" pode ser quase garantido ser atingido por um ataque do tipo ASPROX mais cedo ou mais tarde. As consultas parametrizadas são a melhor maneira de se proteger contra isso, mas uma abordagem rápida se os valores de sua querystring forem todos numéricos é usar cint() - por exemplo
strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)

Isso lançará um erro de incompatibilidade de tipo se a querystring contiver algo diferente de números, e o script cairá antes de tentar executar sua consulta sql.