可以用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;
}
谢谢!
答案 0 :(得分:0)
创建临时表以存储您已更新的ID。更新TOP X记录,直到不再符合条件(不包括您已更新的ID)。
这样的事情:
$(document).ready(function() {
setTimeout(function() {
('html, body').animate({scrollTop: $('#hello').offset().top },4000);
}, 2000);})