動的 SQL およびテーブル変数: SQL Server 2008 の回避策
ストアド プロシージャでは、多くの場合、テーブル変数と対話する動的に実行される SQL ステートメントが必要になります。 ただし、SQL Server 2008 では、動的 SQL 内でテーブル変数を直接使用する場合に課題があり、頻繁に「テーブル変数を宣言する必要があります」エラーが発生します。
この制限は、動的 SQL ステートメント内のテーブル変数の変更に対する SQL Server 2008 の制限に起因します。 直接の更新や変更は許可されません。
この解決策には、テーブル値パラメーター (TVP) の使用が含まれます。 TVP は読み取り専用の入力パラメーターとして機能し、動的 SQL コンテキスト内で変更することなく表形式のデータにアクセスできるようにします。
TVP の使用例を示します:
<code class="language-sql">CREATE TYPE MyTable AS TABLE ( TID int, RELSku nvarchar(MAX) ); DECLARE @TSku AS MyTable; INSERT INTO @TSku VALUES (1,'Item 1'), (2,'Item 2'); SET @col_name = 'Assoc_Item_' + CONVERT(nvarchar(2), @curr_row1); SET @sqlstat = 'UPDATE @RelPro SET ' + @col_name + ' = (SELECT RELSku FROM @TSku WHERE TID = ' + CONVERT(nvarchar(2), @curr_row1) + ') WHERE RowID = ' + CONVERT(nvarchar(2), @curr_row); EXEC sp_executesql @sqlstat, N'@TSku MyTable READONLY', @TSku=@TSku;</code>
この改訂されたコードは以下を示しています:
MyTable
は、テーブル変数 @TSku
を作成するために定義されています。@sqlstat
) は、データを変更せずに @TSku
から読み取るクエリを構築します。sp_executesql
は、@TSku
を READONLY
パラメータとして渡して動的 SQL を実行します。この方法は、SQL Server 2008 の動的 SQL 内のテーブルのような構造を効果的に活用し、動的に生成されたクエリ内でテーブル変数を直接操作するという固有の制限を回避します。
以上がSQL Server 2008 の動的 SQL でテーブル変数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。