COMMIT基于SQL SELECT的事务每N行

时间:2015-10-13 21:54:02

标签: sql-server select transactions sql-update commit

可以用CURSOR做到这一点。但是,我们正在写一个文件,以便在几周内上线回滚。

ANSWER / UPDATE :使用CURSOR伤害。可能不是最好的方法,但有效。

-- 202,739
DECLARE @UPDATECOUNT INT
SET @UPDATECOUNT=0

SELECT 
    'UPDATE some_table SET field='+original_field+' WHERE ID='+ID+'' 
 as 'BackupData'
FROM some_table (nolock)  
WHERE Another_ID IN(SELECT Another_ID FROM Another_Table WHERE NAME='Business-group') 

        set @UPDATECOUNT = @UPDATECOUNT + 1
        -- Commit every 10000 records and start a new transaction
        IF @UPDATECOUNT % 10000 = 0 
        BEGIN
            COMMIT TRANSACTION
            BEGIN TRANSACTION
        END

我们想做的是每隔1000或10000行写一次回滚SQL脚本一次COMMIT ..选择工作正常并创建UPDATE确定。

但是,我们有大约200,000条记录要更新。这是一个回滚脚本,但在今天早上测试回滚时,SQL Server不喜欢大量的记录。

看过这个:http://www.sqlusa.com/bestpractices2005/hugeupdate/如果所有记录都相同,那就太棒了,但事实并非如此。

由于我们设置的权限有限,因此公司不允许使用OPENROWSET或相关功能。

这是我们到目前为止所做的:

#define MAXBUF 4096
int main(int argc, char* argv[]){
int x = 0, y, z = 1, a;         //x: Counter, Y:int for open, z:another counter, a:int for read
char buff[MAXBUF];              //set buffer size
int fe,fn,ft;                   //fe = found E, fn = found n, ft = found T
if((y = open( argv[2], O_RDONLY )) == -1){
    errHandler("Couldn't open ", argv[2]);
    }
            .
            .
            .

if(fn  == 1){                                   //if fn returned true
    printf("%d ", z++);
    }

while( ( a = read( y, buff, MAXBUF ) ) > 0 ){           

    if ( buff == '\n' && fe && fn )        //<--
        printf("$\n%4d:  ", z++ );
    else if ( buff == '\n' && fe )
        printf("\n");                      //Flags for various options
    else if ( buff == '\t' && ft )         
        printf("^T");
    else if ( buff == '\n' && fn )
        printf("\n%4d:  ", z++ );          //<--
    else
        printf("%c", buff);
}
close(y);
if ( close( y ) == -1)
    printf("Unable to close file");
return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:0)

创建临时表以存储您已更新的ID。更新TOP X记录,直到不再符合条件(不包括您已更新的ID)。

这样的事情:

$(document).ready(function() {
 setTimeout(function() {
   ('html, body').animate({scrollTop: $('#hello').offset().top },4000);
 }, 2000);})