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'