如何精确获取sql返回的dataset中对应的table

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何精确获取sql返回的dataset中对应的table相关的知识,希望对你有一定的参考价值。

例:
表A: select * from #a
表B:select * from #B

返回的dataset中会有俩张表, 而去表的时候以前我是用ds.Table[0] ,ds.Tables[1]来去的,但是现在实际开发中一次会返回20多张datatable, 如果还用索引取以后维护的时候就容易乱了,

我的问题就是,能不能在sql脚本中写什么东西使得返回的ds中的Datatable的tableName有值,即类似用ds.Tables["A"]便取到A表的数据

ps1:用其他非索引的方式也可以
ps2:不能逐个取表,因为有几张表是通过其他表的数据计算出来的, 也不能取回来再算,别人在调用的时候会很复杂

求大神帮忙

目前.NET的驱动无法在SQL返回到ADO.NET是自动设置TableName属性,

    可以参考的简介实现:

SQL脚本 :
    select 'tbA','tbB','tbC' 
    select * from tbA
    select * from tbB
    select * from tbC
前端程序完成映射供其他模块以ds.Tables["A"]命名方式调用:
       int i = 1;
       foreach (string tablename in dsData.Tables[0].Rows[0][0].ToString().Split(','))
       
           dsData.Tables[i++].TableName = tablename;
       

    还有存储过程参数方式、但仍要前端进行一次映射:

Create procedure getQuery (@tb1 varchar(50) output,@tb2 varchar(50) output)
AS
set @tb1='tbA'
set @tb2 'tbB'
select * from tbA
select * from tbB
或者:
Create procedure getQuery()
    AS
    select * from tbA
    select * from tbB
return 'tbA,tbB'

参考技术A 你保存到dataset 时就把表名也保存进去。调用时直接用ds.table['name']

请问mysql的sql中如何计算两个datetime的差,精确到小时,谢谢

请问mysql的sql中如何计算两个datetime的差,精确到小时,谢谢
select TIMESTAMPDIFF(MINUTES,offduty_date,onduty_date) testDate from bao_dan_info
我这样写sql,但是报错,请高人指点



TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。
其结果的单位由interval 参数给出。该参数必须是以下值的其中一个:

FRAC_SECOND 表示间隔是毫秒
SECOND  秒
MINUTE  分钟
HOUR  小时
DAY  天
WEEK  星期
MONTH  月
QUARTER  季度
YEAR  年



SELECT '年'  AS  `日期部分`,  TIMESTAMPDIFF(YEAR, '2012-12-21',  CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '季度'  AS  `日期部分`,  TIMESTAMPDIFF(QUARTER, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '月'  AS  `日期部分`,  TIMESTAMPDIFF(MONTH, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '日'  AS  `日期部分`,  TIMESTAMPDIFF(DAY, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '周'  AS  `日期部分`,   TIMESTAMPDIFF(WEEK, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '时'  AS  `日期部分`,   TIMESTAMPDIFF(HOUR, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '分'  AS  `日期部分`,   TIMESTAMPDIFF(MINUTE, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
UNION ALL
SELECT '秒'  AS  `日期部分`,   TIMESTAMPDIFF(SECOND, '2012-12-21', CURRENT_TIMESTAMP()) AS `数值`
;


+----------+----------+
| 日期部分 | 数值     |
+----------+----------+
| 年       |        1 |
| 季度     |        4 |
| 月       |       12 |
| 日       |      388 |
| 周       |       55 |
| 时       |     9328 |
| 分       |   559737 |
| 秒       | 33584279 |
+----------+----------+
8 rows in set (0.00 sec)


mysql> select CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2014-01-13 16:58:17 |
+---------------------+
1 row in set (0.00 sec)

参考技术A TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
www.2cto.com
说明:
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的
单位由interval 参数给出。interval 的法定值同TIMESTAMPADD()函数说明中所列出的相同。

SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01');
interval可是:
SECOND 秒 SECONDS
MINUTE 分钟 MINUTES
HOUR 时间 HOURS
DAY 天 DAYS
MONTH 月 MONTHS
YEAR 年 YEARS追问

不对啊,大哥,这个都是网上的,但是用不了啊?

追答

报什么错误?

本回答被提问者和网友采纳
参考技术B 精确到小时
select TIMESTAMPDIFF(Hour,'2014-01-01 14:00','2014-01-01 16:00');
精确到分钟
select TIMESTAMPDIFF(MINUTE,'2014-01-01 14:00','2014-01-01 16:00')

以上是关于如何精确获取sql返回的dataset中对应的table的主要内容,如果未能解决你的问题,请参考以下文章

执行触发器时,精确获取返回的行数超过请求的行数 SQL*PLUS

delphi 如何获取执行sql返回的结果

从返回类型 DataSet 获取输出并将其显示在 Gridview 中

从返回类型DataSet获取输出并将其显示在Gridview中

如何把XML里面的节点内容以DataSet的形式返回出来,求代码

通过 LINQ-to-SQl 加载数据集