c#能实现吗?
一般情况下用SqlDataReader 中的Read方法可以实现一次读取数据库中的一行可是我现在想读取第一条后,再读取第100条
虽然可以用循环的方式得到第一百条的数据,但是我想知道有没有其他更省时间的方法 --------------------编程问答-------------------- SQL语句直接读取第1条和第100条不就行了 --------------------编程问答-------------------- 怎么写啊 --------------------编程问答-------------------- select top 1 * from table1 --第1条
select top 1 * from table1 where id not in (select top 99 id from table1) --第100条 --------------------编程问答-------------------- 谢谢楼上的
但是我不是这个意思啊
我的意思是说我要分别读取第1条,第100条,第200条,第300条,第400条,第500条....
我怎不能写那么多语句吧 --------------------编程问答-------------------- 用sqlAdapter把结果集放到datatable里面
然后dt.rows[99] --------------------编程问答-------------------- 你还是用游标吧。。速度最快 --------------------编程问答-------------------- SQL SERVER 2005 支持ROW_NUMBER OVER函数。
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, *
FROM EMPLOYEE
) T
WHERE T.ROWID=1 OR T.ROWID=100
SQL SERVER 2000 的话可以用Identity(int, 1, 1)
SELECT *
FROM (
SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME
FROM EMPLOYEE ORDER BY EMPID
) T
WHERE T.ROWID=1 OR T.ROWID=100
--------------------编程问答-------------------- 1和100,200,300, 400
那就是1和100的整数倍咯(对100求余数=0)
SELECT *
FROM (
SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME
FROM EMPLOYEE ORDER BY EMPID
) T
WHERE T.ROWID=1 OR T.ROWID%100=0
--------------------编程问答-------------------- 谢谢楼上的
但是我不是这个意思啊
我的意思是说我要分别读取第1条,第100条,第200条,第300条,第400条,第500条....
我怎不能写那么多语句吧
--------------------编程问答-------------------- 建议先从数据库中将你需要读的数据通过DataAdataper放到一个你自己定义的表中,然后使用表中数据读取方式读取你所需要的记录。速度很快的。 --------------------编程问答-------------------- 请问8楼
--用sql语句写
如果有主键列id``可以这样:
select * from
(select px=(select count(1) from 表名 where id<a.id)+1 from 表名 a)b
where px=1 or px%100=0
SELECT *
FROM (
SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME
FROM EMPLOYEE ORDER BY EMPID
) T
WHERE T.ROWID=1 OR T.ROWID%100=0
中的ROWID EMPID FNAME LNAME等等都分别代表什么呢?谢谢 --------------------编程问答-------------------- EMPID,FNAME,LNAME是表EMPLOYEE中的字段名,你根据你自己的表进行修改。ROWID就是对记录的一个编号。 --------------------编程问答-------------------- 我改后的语句是
SELECT * FROM (SELECT ROWID=IDENTITY(int,1,1),frequency FROM N0_Data ORDER BY frequency ) T WHERE T.ROWID=1 OR T.ROWID%100=0
可是提示:"关键字 'IDENTITY' 附近有语法错误。"
请问这是怎么回事啊?谢谢你了
--------------------编程问答-------------------- 谢谢8楼的
我用SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, *
FROM EMPLOYEE
) T
WHERE T.ROWID=1 OR T.ROWID=100
语句成功了
还有一个问题就是我能不能同时得到数据库记录总数呢?(不用COUNT(*))? --------------------编程问答--------------------
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, *, count(*) AS CNT
FROM EMPLOYEE
) T
WHERE T.ROWID=1 OR T.ROWID=100
让每条数据都带上Count,就可以了。
--------------------编程问答-------------------- 我这样的代码显示有错啊
SELECT frequency
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, * ,count(*) AS CNT
FROM N2_Data
) T
WHERE T.ROWID=1 OR T.ROWID%10000=0
这是怎么回事,不加",count(*) AS CNT "是对的,加了就有问题了 --------------------编程问答-------------------- Sql server 2005:
SELECT
a.num,
table1.*
FROM
table1,
(select id, ROW_NUMBER() over (ORDER BY id) as num from table1) a
WHERE
(a.num % 100 =0 or a.num = 1)
and
a.id = table1.id
PS: ID为你要进行排序的字段
返回1,100,200,300,400,......10000,...... --------------------编程问答-------------------- 用sql语句也可以,用程序控制也可以 --------------------编程问答-------------------- 程序控制是不是指用sqldatareader啊
那样我觉得速度不怎么样啊? --------------------编程问答-------------------- 那么你就当独取一下Count呗。
或者这样:
--------------------编程问答-------------------- 谢谢fangxinggood
SELECT frequency,
(
select count(*) from n2_data
) as cnt
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, *
FROM N2_Data
) T
WHERE T.ROWID=1 OR T.ROWID%10000=0
功能是完成了,但是运行的速度好慢啊?
能不能改进一下加快速度啊,谢谢 --------------------编程问答-------------------- --------------------编程问答-------------------- 改进方案:
1. select count(*) from n2_data 单独拿出来查询一次。(这个是影响速度的关键)
2. 用WITH关键字,另外不用*了,因为你只要N2_Data中的frequency字段。
--------------------编程问答-------------------- WHERE漏写了... --------------------编程问答-------------------- select count(*) from n2_data
WITH T As (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID,
frequency
FROM N2_Data
)
SELECT frequency
FROM T
这个查询语句也很耗时啊,能不能改进啊? --------------------编程问答-------------------- WITH T As (SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID,
frequency
FROM N2_Data)
SELECT frequency FROM T WHERE T.ROWID=1 OR T.ROWID%10000=0
提示:"关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。"
怎么回事啊?麻烦指正! --------------------编程问答-------------------- WITH T AS
(SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, frequency FROM N2_Data)
SELECT frequency FROM T WHERE T.ROWID=1 OR T.ROWID%10000=0
我没有测试环境哦。这个如果不行,你还用子查询方式吧。
select count(*) from n2_data 这个如果很慢,那你就应该查查看你这个表有没有建立索引了。
--------------------编程问答-------------------- 你为什么不用DATATABLE呢,你的数据量很大吗?
你把数据取出来放到DATATABLE后就就想取哪行就取哪行了吗. --------------------编程问答-------------------- 回27楼
语句在执行的时候提示错误::关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾
能不能修改一下啊 --------------------编程问答-------------------- 回28楼
因为数据量很大,所以用DATATABLE很消耗时间 --------------------编程问答-------------------- 用这个也行了,只要把Count提出去,这个效率也不是很差的。
SELECT frequency
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY abstime ASC) AS ROWID, *
FROM N2_Data
) T
WHERE T.ROWID=1 OR T.ROWID%10000=0
--------------------编程问答-------------------- 回31楼
count提出去是可以的,但是单独运行select count(*) 也是件很消耗时间的事啊
有没有什么好的办法改进一下呢 --------------------编程问答-------------------- 你把*号换成主键试试:
select count(frequency) from n2_data
你现在select count(*)执行多长时间?整个表的数量级是多少? --------------------编程问答-------------------- 学习!! --------------------编程问答-------------------- 回33楼
现在执行count(frequency)
要一分钟
共320000条记录 --------------------编程问答-------------------- 学习了!呵呵
补充:.NET技术 , C#