u***t 发帖数: 3986 | 1 from a recordset, how to fetch records from row 1000 to row 2000?
Thanks. |
g***l 发帖数: 18555 | 2 SQL SERVER有一个ROW_NUMBER() FUNCTION,还可以用个TEMP TABLE 搞个IDENTITY
COLUMN,CREATE TABLE最好还是在STORED PROCEDURE里 |
u***t 发帖数: 3986 | 3 SQL SERVER 2008 doesn't recognize Row_Count(), dawn it! |
i****a 发帖数: 36252 | 4 ??
ROW_NUMBER()
【在 u***t 的大作中提到】 : SQL SERVER 2008 doesn't recognize Row_Count(), dawn it!
|
B*****g 发帖数: 34098 | 5 then use rowcount, hehe
【在 u***t 的大作中提到】 : SQL SERVER 2008 doesn't recognize Row_Count(), dawn it!
|
g***l 发帖数: 18555 | 6 ROW_NUMBER() RANK()两个FUNCTION是2005添加的,我们经常要用
http://msdn.microsoft.com/en-us/library/ms186734.aspx
【在 i****a 的大作中提到】 : ?? : ROW_NUMBER()
|
B*****g 发帖数: 34098 | 7 这个要算db版越境问题了。还是那句话,本版90%的sql问题可以用partition by解
决。
【在 g***l 的大作中提到】 : ROW_NUMBER() RANK()两个FUNCTION是2005添加的,我们经常要用 : http://msdn.microsoft.com/en-us/library/ms186734.aspx
|
g***l 发帖数: 18555 | 8 RECORDSET就是临时储存的东西,CREATE RECORDSET的时候就要加上ID,这样你才能取
1000-2000,否则你就要从头LOOP一遍。还是那句话,RECORDSET是个临时性的,最好数
据存TABLE里,多少RECORD,要哪几个COLUMNS,做好了,最后全读出来完事,
MANIPULATE RECORDSET又笨又慢,而且很容易出错。 |
u***t 发帖数: 3986 | 9 SQL SERVER MANAGEMENT STUDIO 2008
select ROW_NUMBER() OVER (ORDER BY ShopperID) AS 'RowNumber', ShopperID,
ShipEmail from Profiles.dbo.address WHERE RowNumber BETWEEN 2 AND 5
Msg 195, Level 15, State 10, Line 2
'ROW_NUMBER' is not a recognized function name. |
B*****g 发帖数: 34098 | 10 哥们,你有木有读gejkl贴的link?
【在 u***t 的大作中提到】 : SQL SERVER MANAGEMENT STUDIO 2008 : select ROW_NUMBER() OVER (ORDER BY ShopperID) AS 'RowNumber', ShopperID, : ShipEmail from Profiles.dbo.address WHERE RowNumber BETWEEN 2 AND 5 : Msg 195, Level 15, State 10, Line 2 : 'ROW_NUMBER' is not a recognized function name.
|
|
|
g***l 发帖数: 18555 | 11 不能放在WHERE CLAUSE里,
select * from ( select ROW_NUMBER() OVER (ORDER BY ShopperID) AS RowNumber,
ShopperID, |
u***t 发帖数: 3986 | 12 kind of. Why? do I have a syntax error?
I am no DBA but a VB developer who's implementing an framework to validate
ETL data migration.
【在 B*****g 的大作中提到】 : 哥们,你有木有读gejkl贴的link?
|
i****a 发帖数: 36252 | 13 select @@version
what do you get?
and you need to put result into a temp table before you can use "RowNumber"
【在 u***t 的大作中提到】 : SQL SERVER MANAGEMENT STUDIO 2008 : select ROW_NUMBER() OVER (ORDER BY ShopperID) AS 'RowNumber', ShopperID, : ShipEmail from Profiles.dbo.address WHERE RowNumber BETWEEN 2 AND 5 : Msg 195, Level 15, State 10, Line 2 : 'ROW_NUMBER' is not a recognized function name.
|
B*****g 发帖数: 34098 | 14 再读一边吧,尤其是例子。
【在 u***t 的大作中提到】 : kind of. Why? do I have a syntax error? : I am no DBA but a VB developer who's implementing an framework to validate : ETL data migration.
|
g***l 发帖数: 18555 | 15 老兄,你好像没有基本的DEVELOPMENT的概念啊,不是凑合着能把数据弄对就完了。
VB DEVELOPER, 打开数据放网上
DB DEVELOPER 写STORED PROCEDURE
DBA提供SCHEMA, 数据
【在 u***t 的大作中提到】 : kind of. Why? do I have a syntax error? : I am no DBA but a VB developer who's implementing an framework to validate : ETL data migration.
|
u***t 发帖数: 3986 | 16 SELECT @@ VERSION:
SQL SERVER 2000 - 8.00.2282
Dang!
【在 i****a 的大作中提到】 : select @@version : what do you get? : and you need to put result into a temp table before you can use "RowNumber"
|
g***l 发帖数: 18555 | 17 我已经给你改好了,ROW_NUMBER等于是重新对你的QUERY排序,你不能在排序的时候
FILTER,而必须到排完序之后的QUERY再FILTER。
【在 u***t 的大作中提到】 : SELECT @@ VERSION: : SQL SERVER 2000 - 8.00.2282 : Dang!
|
u***t 发帖数: 3986 | 18 我用VB 写framework自动比较SOURCE和TARGET的数据并且产生报告, 我也不知道算是啥
...你说?
【在 g***l 的大作中提到】 : 老兄,你好像没有基本的DEVELOPMENT的概念啊,不是凑合着能把数据弄对就完了。 : VB DEVELOPER, 打开数据放网上 : DB DEVELOPER 写STORED PROCEDURE : DBA提供SCHEMA, 数据
|
u***t 发帖数: 3986 | 19 2000不支持ROW_NUMBER()function
【在 g***l 的大作中提到】 : 我已经给你改好了,ROW_NUMBER等于是重新对你的QUERY排序,你不能在排序的时候 : FILTER,而必须到排完序之后的QUERY再FILTER。
|
u***t 发帖数: 3986 | |
|
|
i****a 发帖数: 36252 | |
g***l 发帖数: 18555 | 22 两个TABLE之间的比较用VB,妈也,打开SOURCE的RECORDSET,一个记录一个记录的走,
然后再打开TARGET的RECORDSET,一个记录一个记录,两个LOOP套一起,这可是最笨的
办法了。数据库两个表比较不难的啊。
【在 u***t 的大作中提到】 : 我用VB 写framework自动比较SOURCE和TARGET的数据并且产生报告, 我也不知道算是啥 : ...你说?
|
u***t 发帖数: 3986 | 23 就是不要single record的processing.
要recordset.
用recordset.delete()如何?
【在 g***l 的大作中提到】 : 两个TABLE之间的比较用VB,妈也,打开SOURCE的RECORDSET,一个记录一个记录的走, : 然后再打开TARGET的RECORDSET,一个记录一个记录,两个LOOP套一起,这可是最笨的 : 办法了。数据库两个表比较不难的啊。
|
g***l 发帖数: 18555 | 24 明明是数据库的问题你非要用VB,你把他们IMPORT一个DATBASE里面比较是最容易的,
其它的办法都是愚蠢的,做不对的可能也很大。
【在 u***t 的大作中提到】 : 就是不要single record的processing. : 要recordset. : 用recordset.delete()如何?
|
u***t 发帖数: 3986 | 25 没有权限走这条路
【在 g***l 的大作中提到】 : 明明是数据库的问题你非要用VB,你把他们IMPORT一个DATBASE里面比较是最容易的, : 其它的办法都是愚蠢的,做不对的可能也很大。
|
u***t 发帖数: 3986 | 26 想了个办法:
select *
from (
select top 10 *
from (
select top 20(or 30, or 40...) *
from table
order by ...id
) tab order by ...id DESC
) tab1 order by ...id |
g***l 发帖数: 18555 | 27 两个TABLE比较要在KEY上比啊,您老这是在做什么?
【在 u***t 的大作中提到】 : 想了个办法: : select * : from ( : select top 10 * : from ( : select top 20(or 30, or 40...) * : from table : order by ...id : ) tab order by ...id DESC : ) tab1 order by ...id
|
u***t 发帖数: 3986 | 28 breaking up a huge recordset into multiple smaller recordsets so I can use
Union All with Count(*) to compare the source and target recordsets.
No keys, can't process the comparison records by records.
【在 g***l 的大作中提到】 : 两个TABLE比较要在KEY上比啊,您老这是在做什么?
|
g***l 发帖数: 18555 | 29 我真服了你的,你是不假设两个TABLE是一模一样的包括顺序?没KEY你比什么,就只能
一个记录一个记录的去比,每个COLUMN都要MATCH,MATCH了放到MATCH的堆里,不MATCH
就放不MATCH的堆里,SOURCE走一遍搞两堆,然后TARGET再走一边,再分两堆。你脑子
现在很糊涂,根本不知道在做什么。
【在 u***t 的大作中提到】 : breaking up a huge recordset into multiple smaller recordsets so I can use : Union All with Count(*) to compare the source and target recordsets. : No keys, can't process the comparison records by records.
|
B*****g 发帖数: 34098 | 30 你干嘛不在在VB里每1000个一停
【在 u***t 的大作中提到】 : breaking up a huge recordset into multiple smaller recordsets so I can use : Union All with Count(*) to compare the source and target recordsets. : No keys, can't process the comparison records by records.
|
|
|
g***l 发帖数: 18555 | 31 他是假设两个TABLE一模一样的去比,包括顺序也一样,但实际情况复杂的很,比如
SOURCE多一个记录,又没有PRIMARY KEY,只能去TABLE SCAN
source target
1 1
2 3
3 4
4 5
5 6
【在 B*****g 的大作中提到】 : 你干嘛不在在VB里每1000个一停
|
u***t 发帖数: 3986 | 32 你不知道我干什么...source的东西是标准, target里的东西是要看是否migrate 好的.
所以我break up source 的 recordset, 那每个recordset PK的上下限到target里去拿
相应recordset做对比 (...union all...count(*) = 1...是mismatched)
我不做ETL, 我自动测试ETL...
我看你糊涂...
MATCH
【在 g***l 的大作中提到】 : 我真服了你的,你是不假设两个TABLE是一模一样的包括顺序?没KEY你比什么,就只能 : 一个记录一个记录的去比,每个COLUMN都要MATCH,MATCH了放到MATCH的堆里,不MATCH : 就放不MATCH的堆里,SOURCE走一遍搞两堆,然后TARGET再走一边,再分两堆。你脑子 : 现在很糊涂,根本不知道在做什么。
|
y****w 发帖数: 3747 | 33 这种思想在数据库这个讲究thinking in set的地方当然会受点攻击,呵呵。
-----------------
考虑下这个,如果你恰好有条件搞,
弄一个本地库,把src和tgt都搞来,在本地比较就行了。 随便oracle,db2,sql server
,mysql都可以,不想麻烦装数据库就拷贝个derby之类的内存库,几M一个jar包这个数
据库系统就有了,用java或什么你熟悉的语言去访问,简单的很。
如果只有几万甚至几十万条记录,自己做loop怎么慢慢也能跑出来;要是有个几十M几
百M,还是用现成的好些。 别忘了索引。
的.
【在 u***t 的大作中提到】 : 你不知道我干什么...source的东西是标准, target里的东西是要看是否migrate 好的. : 所以我break up source 的 recordset, 那每个recordset PK的上下限到target里去拿 : 相应recordset做对比 (...union all...count(*) = 1...是mismatched) : 我不做ETL, 我自动测试ETL... : 我看你糊涂... : : MATCH
|
c*******e 发帖数: 8624 | 34 你这个recordset是table吗? table本身是无序的
【在 u***t 的大作中提到】 : from a recordset, how to fetch records from row 1000 to row 2000? : Thanks.
|
B*****g 发帖数: 34098 | 35 你要把所有贴字都看完才知道
【在 c*******e 的大作中提到】 : 你这个recordset是table吗? table本身是无序的
|
c*******e 发帖数: 8624 | 36 算了,您老给解决就行了
【在 B*****g 的大作中提到】 : 你要把所有贴字都看完才知道
|
B*****g 发帖数: 34098 | 37 不行呀,vb+sql server2000那是10年前的事了
【在 c*******e 的大作中提到】 : 算了,您老给解决就行了
|
y****w 发帖数: 3747 | 38 假如这个验证可以做成单独的模块,那技术选择面就大多了。绑在vb里面,确实办法不
多。
【在 B*****g 的大作中提到】 : 不行呀,vb+sql server2000那是10年前的事了
|
B*****g 发帖数: 34098 | 39 java, haha
【在 y****w 的大作中提到】 : 假如这个验证可以做成单独的模块,那技术选择面就大多了。绑在vb里面,确实办法不 : 多。
|
y****w 发帖数: 3747 | 40 y, derby with java. easy, nice sql support, totally free.
【在 B*****g 的大作中提到】 : java, haha
|
|
|
m******y 发帖数: 588 | 41 2000比较麻烦,加个identity column吧. |