SQL クエリ内でテーブル名を動的に指定することは可能ですが、SQL インジェクションの脆弱性に対する強力な保護手段が必要です。 推奨されるアプローチでは、組み込みの SQL Server 関数を利用します。
テーブル名を保持する変数を宣言します:
<code class="language-sql"> DECLARE @TableName NVARCHAR(100);</code>
テーブル名を変数に割り当てます:
<code class="language-sql"> SET @TableName = '<[db].><[schema].>tblEmployees';</code>
テーブルのオブジェクト ID を取得します:
<code class="language-sql"> SET @TableID = OBJECT_ID(@TableName);</code>
安全のためにオブジェクト ID を使用して SQL クエリを構築します:
<code class="language-sql"> SET @SQLQuery = 'SELECT * FROM ' + QUOTENAME(OBJECT_NAME(@TableID)) + ' WHERE EmployeeID = @EmpID';</code>
sp_executesql
:
<code class="language-sql"> EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID;</code>
このメソッドは、テーブル名が安全に処理されることを保証し、OBJECT_ID
と QUOTENAME
を使用して入力を SQL ステートメントに組み込まれる前にサニタイズすることで SQL インジェクション攻撃を防ぎます。 パラメータ化されたクエリで sp_executesql
を使用すると、セキュリティがさらに強化されます。
以上がSQL クエリでテーブル名を安全に動的に設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。