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

ストアドプロシージャEXECとsp_executesqlの違いは?

    sp_executesql SQLはおそらく;

    DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + 
                @TableName + ' where [email protected]'
    

    これにより、SQLに埋め込む代わりに、@eStatusをパラメーターとしてsp_executesqlを呼び出すことができます。これにより、@eStatusが任意の文字を含めることができるという利点が得られます。 安全である必要がある場合は、データベースによって自動的に適切にエスケープされます。

    これをEXECに必要なSQLと比較してください。;

    DECLARE @SQL as nvarchar(128) = 'select ' + @Columns + ' from ' + 
                @TableName + ' where Status=' + char(39) + @Status + char(39)
    

    ... @Statusに埋め込まれたchar(39)により、SQLが無効になり、SQLインジェクションの可能性が生じる可能性があります。たとえば、@StatusがO'Reillyに設定されている場合 、結果のSQLは次のようになります;

    select acol,bcol,ccol FROM myTable WHERE Status='O'Reilly'
    


    1. .NET / Oracle:プログラムでDDLステートメントを使用してスクリプトを実行する方法

    2. Ansibleを使用したPostgreSQLレプリケーションのセットアップとメンテナンス

    3. 別のテーブルからMySQLに挿入

    4. javascriptを使用してmysqlデータベースからデータを取得するにはどうすればよいですか?