2011-06-16 55 views
0

我有一个简单的问题,两行,我想当前行与前一个比较,如果它们是相同的,然后出rowid的。阿洛斯当我打印@abc和@ ABC2为什么他们给我同样的结果?如何比较使用游标

以下是我的代码:

DECLARE 
      @abc float, 
      @def datetime, 

      @abc2 float, 
      @def2 datetime 


DECLARE downTime SCROLL CURSOR FOR 
select D_ABC, D_DEF 

OPEN downTime 
    FETCH First FROM downTime INTO @abc,@def 
    FETCH NEXT FROM downTime INTO @abc2,@def2 

    print @abc 
    print @abc2 


     WHILE (@@FETCH_STATUS=0) 

     BEGIN 

       // Out here I want to print the rowID's of those rows where @abc = @abc2 

     END 
CLOSE downTime 
+0

哪里新行从何而来?你说的“前一个”是什么意思? – Oded 2011-06-16 09:56:08

+0

不需要的光标。桌子看起来像什么? – gbn 2011-06-16 09:57:20

回答

2

你不需要光标

  • 对于每一行,得到了前一个
  • 比较他们

喜欢的东西

SELECT 
    * 
FROM 
    myTable M 
    CROSS APPLY 
    (--get previous row 
    SELECT TOP 1 * 
    FROM myTable M2 
    WHERE M2.ID < M.ID 
    ORDER BY M2.ID 
    ) foo 
WHERE --compare 
    foo.col1 = M.col1 AND foo.col2 = M.col2 etc 

略少于准确的(它,你会得到误报)

... 
WHERE 
    CHECKSUM(M.*) <> CHECKSUM(foo.*)