3

ここで説明したように: List<> を SQL ストアド プロシージャや他の多くの場所に渡す場合、パラメーターとしてテーブルを渡す 1 つの方法は、SqlParameter を使用することです。

これに関する問題は、TypeName プロパティでユーザー定義テーブル タイプを指定する必要があることです。

Excel ファイルからデータをロードし、それをパラメーターとして SQL ステートメントに渡す必要があります。SQL ステートメントは、このデータを他のデータベース テーブルと結合して結果を取得します。

そのためには、Excel ファイルのバリエーションごとにユーザー定義テーブル タイプを作成する必要があります。各 Excel ファイルからデータを渡すためだけに使用される型で SQL 型を汚染したくありません。どうすればそれを達成できますか?

タイプがわからないものに参加するにはどうすればよいかという質問があるかもしれませんが、その答えは、一部のフィールドの名前とタイプは知っていますが、すべてではないということです。また、select * を使用して結合されたデータを返したい場合は、すべてのフィールドをタイプ内にハードコーディングしなくても、フィールドのリストで機能します。

OPENROWSET を使用してこのファイルを SQL から直接結合することはできません。これは、64 ビットの SQL Server を使用しており、奇妙なエラーが発生して動作しないためです。

SQL Server には一時テーブルの概念がありますが、一時型の概念はありません。一時型をシミュレートしたり、テーブルを渡すときに使用しないようにするにはどうすればよいですか?

データを XML として渡すこともできますが、データ サイズが十分に大きく、さらにデータ サイズが 2Gb に制限されていると、効率が低下するようです。

それを整理する 1 つの方法は、型を作成してからステートメントを実行し、その後で型を削除するか、TRY..CATCH を使用して型を catch 内に削除することです。

もう 1 つは、特別なスキーマを作成し、一意の型名をそのスキーマに生成し、ガベージ コレクション SQL ジョブを使用して時々クリーンアップすることです。また、残り物をきれいにするために、最初の方法と組み合わせて使用​​ できます。

他の提案はありますか?

4

1 に答える 1