作成時間が非常に長い結果セットに対して、さまざまなクエリを実行しようとしています。パフォーマンスを向上させるために、一時テーブルを使用し、この一時テーブルに対して多くのクエリを実行したいと考えています。
かなり標準的なようです。それでも、この一時テーブルを動的 SQL で共有するのに苦労しています。私が理解しているように、各 SqlCommand オブジェクトは独自のスレッドで実行されるため、一時テーブルは異なるスコープにあり、クエリスレッドからアクセスできなくなります。
グローバル一時テーブルを使用してみましたが、うまく機能しますが、理想的ではありませんか?
動的 SQL クエリ間でローカル一時テーブルを共有するにはどうすればよいですか?
私の意図:
using (var conn = new SqlClient.SqlConnection("..."))
{
// Creation involes many table joins in reality
String creationScript = "SELECT * FROM FooTable INTO #MyTemp";
SqlCommand createTempTbl = new SqlCommand(creationScript, conn);
createTempTbl.ExecuteNonQuery();
String query1 = "SELECT * FROM #MyTemp where id=@id";
SqlCommand query1Comm = new SqlCommand(query1, conn);
query1Comm.Parameters.Add("@id", ...);
String query2 = "SELECT * FROM #MyTemp where name=@name";
SqlCommand query2Comm = new SqlCommand(query2, conn);
query2Comm.Parameters.Add("@name", ...);
// And so on the queries go
} // Now want #MyTemp to be destroyed