J'essaie de faire beaucoup de requêtes différentes sur un ensemble de résultats qui a un très grand temps de création. Pour obtenir des gains de performances, je souhaite utiliser une table temporaire et effectuer de nombreuses requêtes sur cette table temporaire.Partage de table temporaire SQL entre différents lecteurs SQL
Semble assez standard. Pourtant, j'ai du mal à partager cette table temporaire en SQL dynamique. Si je comprends bien, chaque objet SqlCommand s'exécute dans son propre thread et donc la table temporaire est dans une portée différente - le rendant ainsi inaccessible à partir du thread de la requête.
J'ai essayé d'utiliser une table temporaire globale et cela fonctionne très bien, mais pas idéal?
Comment puis-je partager une table temporaire locale entre des requêtes SQL dynamiques?
Mon intention:
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 [email protected]";
SqlCommand query1Comm = new SqlCommand(query1, conn);
query1Comm.Parameters.Add("@id", ...);
String query2 = "SELECT * FROM #MyTemp where [email protected]";
SqlCommand query2Comm = new SqlCommand(query2, conn);
query2Comm.Parameters.Add("@name", ...);
// And so on the queries go
} // Now want #MyTemp to be destroyed
La question dit que l'affiche a déjà essayé que ... –
Je * vraiment * ne veux pas aller sproc pour le moment. J'essaie de tester mon BL. Et j'ai besoin d'avoir le résultat à la DB, je suis allé sur cette route et la mémoire a été durement touchée. – Llyle
@vanslly, je ne suis pas sûr de savoir ce que vous entendez par "avoir le jeu de résultats strictement à la DB", mais si vous ne voulez pas utiliser un sproc à ce moment-là, la seule option réaliste que je peux penser est une table temporaire globale. – LukeH