sql >> Databasteknik >  >> RDS >> Sqlserver

Villkorligt uttalande i sql-fråga på klassisk ASP-sida

I VBScript kan du använda et-tecken (&) för att sammanfoga strängar. Prova detta:

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  

Du har tre separata "och"-satser att lägga till i din sql-fråga. De villkorliga uttalandena är oberoende av varandra så du bör inte använda elseif som är för olika alternativ inom ett enda villkorligt uttalande. Det är enklare att kontrollera om en sträng inte är tom eller inte if stringname <> "" än att använda len , (och jag tvivlar på att dina villkorliga uttalanden skulle fungera eftersom du verkar använda en liten bokstav "o" där du ska använda en nolla)

Det är väldigt lätt att göra misstag när du sätter ihop sql-frågor som denna. I tester är det ofta värt att lägga till en rad som Response.Write strSqlData innan du försöker köra den för att kontrollera att frågan är vad du tänkt dig

Som andra kommentarer har föreslagit är din kod sårbar för en SQL-injektionsattack. Webbadresser som innehåller ".asp?" kan nästan garanterat drabbas av en attack av ASPROX-typ förr eller senare. Parametriserade frågor är det bästa sättet att skydda sig mot detta, men ett snabbt tillvägagångssätt om alla dina frågesträngsvärden är numeriska är att använda cint() - t.ex.

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

Detta kommer att ge ett typfel överensstämmelse om frågesträngen innehåller något annat än siffror, och skriptet kommer att falla över innan det försöker köra din sql-fråga.



  1. Hur kan jag redigera värden för en INSERT i en trigger på SQL Server?

  2. Kombinera alla resultat från union till en rad när vissa kolumner har olika värden

  3. VBA-kod för att hämta data från Mysql DB i Mac Excel 2011

  4. hur ökar man datetime-värdet med inkrementvärdet som 30 minuter i oracle?