如何添加#temp表

时间:2010-10-28 21:00:25

标签: database tsql

我在查询(TSQL)中形成了一些临时表,比如 - #temphold1,#temphold2,#temphold3 .....#temphold10。每个临时表都有不同的模式(不同的列),每个模式通过对具有特定条件的不同表的数据进行分组而得到我需要确定一种方法将所有这些临时表传送到用户界面并单独显示每个表。有没有办法可以添加所有临时表和特定的索引器,我可以在用户界面检索。

感谢您的回复。

2 个答案:

答案 0 :(得分:1)

不,没有这样的索引器。

但是,SQL Server和ADO.NET支持通过依次选择每个表来返回多个结果集。

在MSDN上查看此howto(如何在Visual C#.NET中使用DataReader处理多个结果)。

所以,在你的存储过程中:

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

本质上,在读完第一个记录集后,你在DataReader上调用NextResult()以获得下一个选择的结果:

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
}

答案 1 :(得分:0)

如果您将结果返回给C#,可以使用DataAdapter这样做:

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
}