SSIS パッケージは、Web アプリケーションから DTEXEC.EXE を介して呼び出されます。このパッケージは、ファイル システム タスクを使用して、Excel テンプレート ファイルのコピーを作成し、Excel の宛先ファイルとして使用します。次に、データ フロー タスクは、レコードを OLE DB ソースから Excel 宛先に送信します。次に、Excel の宛先ファイルがストリーミングされて Web アプリケーション ユーザーのブラウザに戻されます。
Web アプリケーション プール ID がローカル管理者アカウントの場合、これは正常に機能します。また、Web アプリケーション プール ID が、たまたま対話的にログインしている制限付きユーザーである場合にも機能します。
Web アプリケーション プール ID が、同時にログインしていない制限付きユーザーである場合、問題が発生します。小さな Excel ファイル (数百行) も正しく返されます。問題ありません。大きな Excel ファイル (数万行) は空で返されます。ユーザーのブラウザに返されるストリーム ファイルには行がありません。サーバーに書き込まれる宛先ファイルも空です。
SSIS パッケージはエラーを認識せず、何万ものレコードがデータ フローを通過したことを報告します。これは、SQL Server 側の権限の問題ではありません。ユーザー アカウントに SQL Server sysadmin が与えられている場合でも、より大きな Excel 宛先ファイルに行を書き込むことができません。
これは、Windows 側のアクセス許可の問題のように見えます。おそらくディスクに書き込まれるバッファーに関係しているため、数百行しか処理されない場合は問題が発生しません。
DefaultBufferMaxRows (10,000 行) と DefaultBufferSize (10 MB)のデータ フロー タスク設定を増やすことで、ディスク バッファリングを回避できることが期待されていました。ただし、残念ながらこれは機能しません。
これは、同様の問題に遭遇する可能性のある人を支援するために投稿された解決済みの問題です。