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

クエリ文字列の変数を宣言する

    可能ですが、動的 SQL を使用する必要があります。
    動的 SQL の呪いと祝福SQL 続行する前に...

    DECLARE @theDate varchar(60)
    SET @theDate = '''2010-01-01'' AND ''2010-08-31 23:59:59'''
    
    DECLARE @SQL VARCHAR(MAX)  
    SET @SQL = 'SELECT AdministratorCode, 
                       SUM(Total) as theTotal, 
                       SUM(WOD.Quantity) as theQty, 
                       AVG(Total) as avgTotal, 
                      (SELECT SUM(tblWOD.Amount)
                         FROM tblWOD
                         JOIN tblWO on tblWOD.OrderID = tblWO.ID
                        WHERE tblWO.Approved = ''1''
                          AND tblWO.AdministratorCode = tblWO.AdministratorCode
                          AND tblWO.OrderDate BETWEEN '+ @theDate +')'
    
    EXEC(@SQL)
    

    動的 SQL は単なる SQL ステートメントであり、実行前に文字列として構成されます。したがって、通常の文字列連結が発生します。次のような許可されていない SQL 構文を使用する場合は常に、動的 SQL が必要です。

    • IN 句のカンマ区切りの値のリストを表す単一のパラメータ
    • 値と SQL 構文の両方を表す変数 (IE:あなたが提供した例)

    EXEC sp_executesql bind/preparedstatement パラメータを使用できるため、SQL インジェクション攻撃のために一重引用符などをエスケープする必要がありません。



    1. MySQLがnull以外の列に暗黙のデフォルト値を挿入しないようにする

    2. このSQL挿入PHPコードを最適化する方法は?

    3. GreenDaofreemaker.jarがありません

    4. 複合キーからのmysql外部キー参照