我正在尝试对创建时间非常长的结果集进行许多不同的查询。为了获得性能提升,我希望使用一个临时表并在这个临时表上做很多查询。
看起来很标准。然而,我正在努力在动态 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