データファイルとテーブル名が変数であるテーブルにデータファイルを BULK INSERT するために使用する次のようなコードがあります。
DECLARE @sql AS NVARCHAR(1000)
SET @sql = 'BULK INSERT ' + @tableName + ' FROM ''' + @filename + ''' WITH (CODEPAGE=''ACP'', FIELDTERMINATOR=''|'')'
EXEC (@sql)
は標準テーブルでは問題なく機能しますが、データを一時テーブル (たとえば、#MyTable
) にロードするには、同じようなことを行う必要があります。しかし、これを試してみると、次のエラーが表示されます。
Invalid Object Name: #MyTable
BULK INSERT
問題は、ステートメントがオンザフライで構築され、 を使用して実行されEXEC
、呼び出し#MyTable
のコンテキストではアクセスできないという事実によるものだと思います。EXEC
このBULK INSERT
ようにステートメントを作成する必要があるのは、ファイル名をステートメントに挿入する必要があるためです。これが唯一の方法のようです。そのため、可変ファイル名を使用するか、一時テーブルを使用できますが、両方は使用できないようです。
これを達成する別の方法はありOPENROWSET(BULK...)
ますか?
更新: OK、私が聞いているのは、BULK INSERT と一時テーブルが機能しないということです。提案に感謝しますが、私のコードを動的 SQL 部分に移動することは、私の場合は実用的ではありません。
を試しOPENROWSET(BULK...)
てみると、同じ問題が発生しているようです。つまり、変数ファイル名を処理できず、以前のように SQL ステートメントを動的に構築する必要があります (したがって、一時テーブルにアクセスできません)。
したがって、非一時テーブルを使用し、別の方法でプロセスの分離を実現するという1つのオプションしか残されていません(一度に1つのプロセスのみがテーブルを使用できるようにすることによって-私はいくつかの方法を考えることができますそれを行う)。
気に障る。私が最初に意図した方法でそれを行う方がはるかに便利だったでしょう. 些細なことの 1 つにすぎませんが、1 日の時間を無駄にしてしまいます...