C#操作sql查询出的临时表,详细如下:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#操作sql查询出的临时表,详细如下:相关的知识,希望对你有一定的参考价值。

string sql="select code,begdate #tmp from user";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(dt) ;//dt是定义好的一个DataTable
这个DataTable作为dataGridVie的数据源,显示在窗体界面上。现在我还在取用查询出来的dt这个表中的数据,但是不想一个个单元格去遍历这个表,有没有办法用C#操作#tmp这个临时表,使用结果就像我们用sql查询分析器查数据库中的表一样?
想要的效果类似:striing sql2="select begdate from #tmp";这样就取出了我想要的时间数据,有办法吗?

不明白的地方请指出,在线等,谢谢

参考技术A

使用DataTable的Compute方法就可以达到你要的结果. 示例代码如下(关键在最后一个语句中的dt.Compute("sum(小费)", "")):

    protected void TestDataTable() 
        DataTable           dt = new DataTable();
        DataRow             dr = null;
        
        dt.Columns.Add("小费", typeof(int));
        dr = dt.NewRow();
        dr[0] = 10;
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr[0] = 20;
        dt.Rows.Add(dr);
        this.txtVal.Value = dt.Compute("sum(小费)", "").ToString(); // dt.Compute("sum(小费)", "")获得小费字段的合计值
    

本回答被提问者和网友采纳
参考技术B             DataTable dt = new DataTable();
            string s1="V1",s2="V2";
            DataRow[] rows = dt.Select(string.Format("列名1 = '0' and 列名2 = '1' ", s1, s2));
            foreach (DataRow dr in rows)
                ;//遍历

            DataTable selecteddt = dt.Clone();
            foreach (DataRow dr in rows)
                selecteddt.ImportRow(dr);
            //使用selecteddt

追问

不懂,求解释,从数据库里取出来一大堆放到临时表#tmp中,有一列是小费:
小费
11
12
23
14
这我求临时表中的这列的总和怎么操作?我是想问有没有像在查询分析器里操作数据库表一样的方法:select sum(小费) from #tmp这样的方法?

追答

没有这种方法。不过你可以用linq。

如何在没有临时表的 SQL 查询中为组添加序列号

【中文标题】如何在没有临时表的 SQL 查询中为组添加序列号【英文标题】:How to add sequence number for groups in a SQL query without temp tables 【发布时间】:2011-03-09 22:55:39 【问题描述】:

我在 SQL 2008 中创建了一个复杂的搜索查询,它返回按组排序的数据,并且查询本身具有分页和排序功能,但不是根据分页选项返回一组记录,它需要返回一组组(因此记录数会有所不同)。

我目前正在通过使用临时表来执行此操作(第一个临时表创建一个将被选为搜索的一部分的组列表,然后对它们进行编号......第二个查询加入此表到实际搜索...所以,它最终运行搜索查询两次)。

我正在寻找一种更有效的方法来使用 SQL 2008 中的一些新函数(不需要使用临时表)。

如果我能以这样的格式获取数据,我会被设置...

记录组 GroupSequence --------|----------|-------------- 1 鸡 1 2 鸡 1 3 奶牛 2 4 马 3 5 马 3 6 马 3

关于如何在 SQL 2008 中使用单个查询而不使用临时表来完成此任务的任何想法?

【问题讨论】:

哪些列来自数据,哪些需要计算值? 第一列和第二列(“Record[Number]”和“Group”)来自数据。 “GroupSequence”列将由查询计算。 【参考方案1】:

样本数据

create table sometable([group] varchar(10), id int, somedata int)
insert sometable select 'Horses', 9, 11
insert sometable select 'chickens', 19, 121
insert sometable select 'Horses', 29, 123
insert sometable select 'chickens', 49, 124
insert sometable select 'Cows', 98, 1
insert sometable select 'Horses', 99, 2

查询

select
    Record = ROW_NUMBER() over (order by [Group], id),
    [Group],
    GroupSequence = DENSE_RANK() over (order by [Group])
from sometable

输出

Record               Group      GroupSequence
-------------------- ---------- --------------------
1                    chickens   1
2                    chickens   1
3                    Cows       2
4                    Horses     3
5                    Horses     3
6                    Horses     3

【讨论】:

漂亮! DENSE_RANK() 正是我想要的,而且似乎比我使用的临时表更有效。 正是文档为我订购的内容 - DENSE_RANK() 如果组中只有一个字段,这可以工作。但是如果多个字段定义一个组呢?【参考方案2】:

如果没有关于您拥有的表的更多详细信息,我会说查看CTE 查询和row_number 函数......类似于以下内容:

;with groups as (
  select top 10 name, row_number() over(order by name) 'sequence'
  from table1
  group by name
  order by name
)
select row_number() over(order by g.name) 'Record',
  g.name 'GroupName',
  g.sequence 'GroupSequence'
from groups

【讨论】:

出于分页的目的,我修改了大部分搜索查询以使用这种新的“with as”表示法,它的运行速度似乎比 @ 或 # 临时表快得多. 小心,因为这并不总是正确的。 with 查询符号,在这种用法中,就像一个命名子查询(可以多次使用)......所以有时,临时表或表变量会是更好的选择。

以上是关于C#操作sql查询出的临时表,详细如下:的主要内容,如果未能解决你的问题,请参考以下文章

SQL分页查询总记录数和查询信息临时表

sql中查询出一条数据如何将数据存在一个变量中

sql查询后多出一条无效数据?

SQL从选择查询中选择

使用临时表的SQL查询

SQL Server 内联查询是不是在后台创建临时表