2010-10-28 4 views
0

J'ai créé quelques tables temporaires dans ma requête (TSQL) comme - # temphold1, # ​​temphold2, # temphold3 ..... # temphold10. Chaque table temporaire a un schéma différent (colonnes différentes), chacune étant dérivée en regroupant les données de différentes tables avec des conditions spécifiques. J'ai besoin de déterminer un moyen de transporter toutes ces tables temporaires vers l'interface utilisateur et d'afficher chaque table séparément. Est-il possible que je puisse ajouter toutes les tables temporaires avec indexeur spécifique que je peux récupérer à l'interface utilisateur.Comment ajouter des tables #temp

merci pour toute réponse.

+0

Qu'est-ce que l'interface utilisateur? Quelque chose que vous avez créé, ou faites-vous référence à Management Studio? – AaronLS

+0

Pour exécuter la requête en tant que procédure stockée et la sortie vers l'interface utilisateur. – ksh

Répondre

1

Non, il n'existe pas d'indexeur de ce type. Toutefois, SQL Server et ADO.NET prennent en charge le renvoi de plusieurs ensembles de résultats en sélectionnant chaque table à tour de rôle.

Voir ce howto sur MSDN (Comment gérer plusieurs résultats en utilisant le DataReader dans Visual C# .NET).

Ainsi, dans votre procédure stockée:

-- after populating your temp tables: 
SELECT * FROM #table1 
SELECT * FROM #table2 
SELECT * FROM #table3 

En substance, après avoir lu la première recordset, vous appelez NextResult() sur le DataReader afin d'obtenir les résultats de la prochaine sélection:

while(dr.Read()) 
{ 
    // process data from #table1 
} 

dr.NextResult(); 

while(dr.Read()) 
{ 
    // process data from #table2 
} 

dr.NextResult(); 

while(dr.Read()) 
{ 
    // process data from #table3 
} 
+0

merci pour la réponse. – ksh

0

Si vous renvoyez des résultats à C#, vous pouvez le faire avec un DataAdapter comme ceci:

using (SqlConnection conn = new SqlConnection("your connection string")) { 
    SqlParameter[] sqlParams = new SqlParameter[] { 
     new SqlParameter("@param1",10), 
     new SqlParameter("@param2","test") 
    }; 
    conn.Open(); 
    SqlDataAdapter sa = new SqlDataAdapter("spStoredProcName", conn); 
    sa.SelectCommand.CommandType = CommandType.StoredProcedure; 
    sa.SelectCommand.Parameters.AddRange(sqlParams); 
    DataSet ds = new DataSet(); 
    sa.Fill(ds); 
    //ds.Tables[0] == first table 
    //ds.Tables[1] == second table 
    //... etc. 
    //Do whatever you need to here 
}
Questions connexes