Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione condizionale nella query sql sulla pagina ASP classica

In VBScript puoi usare il simbolo e commerciale (&) per concatenare le stringhe. Prova questo:

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  

Hai tre clausole "e" separate da aggiungere alla tua query sql. Le istruzioni condizionali sono indipendenti l'una dall'altra, quindi non dovresti usare elseif che è per diverse opzioni all'interno di una singola istruzione condizionale. È più semplice controllare se una stringa non è vuota if stringname <> "" rispetto all'utilizzo di len , (e dubito che le tue affermazioni condizionali funzionino perché sembra che tu stia utilizzando una lettera minuscola "o" dove dovresti usare uno zero)

È molto facile commettere errori quando si assemblano query sql come questa. Nei test spesso vale la pena aggiungere una riga come Response.Write strSqlData prima di provare ad eseguirlo per verificare che la query sia quella che intendevi

Tuttavia, come suggerito da altri commenti, il tuo codice è vulnerabile a un attacco SQL injection. URL che contengono ".asp?" può quasi essere garantito che prima o poi venga colpito da un attacco di tipo ASPROX. Le query parametrizzate sono il mezzo migliore per proteggersi da questo, ma un approccio rapido se i valori della stringa di query sono tutti numerici consiste nell'usare cint() - es.

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

Ciò genererà un errore di mancata corrispondenza del tipo se la querystring contiene qualcosa di diverso dai numeri e lo script cadrà prima che tenti di eseguire la query sql.