sql >> データベース >  >> RDS >> Sqlserver

従来の ASP ページでの SQL クエリの条件ステートメント

    VBScript では、アンパサンド (&) 記号を使用して文字列を連結できます。これを試してください:

    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  
      

    SQL クエリに追加する 3 つの個別の「and」句があります。条件ステートメントは互いに独立しているため、 elseif を使用しないでください。 これは、単一の条件ステートメント内のさまざまなオプション用です。文字列が空でないかどうかを確認する方が簡単です if stringname <> "" len を使用するよりも 、(そして、ゼロを使用すべきところに小文字の「o」を使用しているように見えるため、条件ステートメントが機能するとは思えません)

    このように sql クエリを組み立てていると、間違いを犯しやすくなります。テストでは、 Response.Write strSqlData のような行を追加する価値があることがよくあります 実行しようとする前に、クエリが意図したものであることを確認してください

    ただし、他のコメントが示唆しているように、コードは SQL インジェクション攻撃に対して脆弱です。 「.asp?」を含む URL遅かれ早かれ、ASPROX タイプの攻撃を受けることはほぼ確実です。パラメータ化されたクエリはこれを防ぐ最善の方法ですが、クエリ文字列の値がすべて数値である場合の簡単な方法の 1 つは、cint() を使用することです。 - 例

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

    クエリ文字列に数値以外が含まれていると、型の不一致エラーがスローされ、SQL クエリを実行する前にスクリプトがフォールオーバーします。



    1. SQLクエリ結果からnull行を削除するにはどうすればよいですか?

    2. EMRの外部ハイブメタストア

    3. 1つの大きなSQLSelectステートメントを使用する必要がありますか、それともいくつかの小さなステートメントを使用する必要がありますか?

    4. Oracle SQL Insert Trigger to Hash Passwordが機能しない(CHARで発行)