将旧表更A新到新表temp?不要直接拷贝,高手们,快来帮忙! 最简单的还是truncate table Ainsert A select * from temp而且速度只会比你说的处理方法快。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想问一下,是什么原因让你考虑需要增加一个过滤性质的表temp,而不是直接对A进行操作呢? re3楼:temp是个临时表,考虑到A表很重要,在对A表更新之前要对temp进行一系列的逻辑检查,有错就立即放弃更新!re2楼:这样未免太武断了吧,不但硬盘受不了,记录有100万条,磁盘的操作肯定会比比较操作慢很多!! temp是个临时表,考虑到A表很重要,在对A表更新之前要对temp进行一系列的逻辑检查,有错就立即放弃更新!--------------------------------------------------------------------------理由不充分。 再re2楼:因为对temp的修改每次不会很多,顶多100来条而已,所以不能直接用2楼的方法!另外我想到一种方法,就是给A增加一个bool标志字段ischanged,拷贝到temp之前先要把ischanged=false,然后对temp的操作过的记录都可以设置ischanged=true,最后再修改A,但是这样会不会不太好? 为什么不充分?A在正式更新之前,就是temp完全修改之前要进行一系列的验证,任何发现的错误都将使temp作废,然后再从A拷贝,再修改,直到正确!!没有temp万万不行的!拷贝temp是很费时间,但是安全第一,否则我不就直接再A中修改了? 给你个最快的不读硬盘的,一个思路。drop table dbo.[A] exec sp_rename 'dbo.temp','[A]'就很快不过要测试你的脚本和存储过程依赖关系。 不好意思,可能我为了简化问题没有把实际情况完整地说出来,而使大家想的方法有偏差,其实temp中不光有A的数据,它还包括另外若干各的数据表中的数据,上面所谓地检查就是检验各个数据之间的联系,不能有错,反正不能把A表删了再把temp命名为A表。而且实际上当temp修改检验完毕并更新A后,它还将接着进行下一步的修改和更新(如果A的字段不改的话),否则还得重新生成一个temp!不知这下说清楚没有,唉!! 有点明白了。你可以枚举所以动态字段,把所以字段值连接起来用函数CHECKSUM(或CHECKSUM_AGG) 生成一个哈希索引字段,按主键ID比较哈希索引就可以知道每条记录是不是更新,修改了。每个表的动态字段用信息视图INFORMATION_SCHEMA.COLUMNS得到。我也不知道明白没有 你那temp表中应该增加两个字段,一个是标识数据来自哪个表(你不是说它的数据来自多个表的吗),另一个是标识数据是否进行了修改代码如下:begin trandelete from a where (条件是temp中属于a表但已经修改的记录)insert into aselect (temp表中所有属于a表的字段) from temp where temp.主码 not in (select 主码 from a) and temp表中属于a表的记录commit 求最优算法 怎么把服务器上的数据库复制一份保存在我的电脑上啊! SQL 2008sa登录错误,求答案... 这样的一个分页的存储过程怎么写的啊? SQL函数怎样算出一个字符串逗号隔开的字符串数量 求异构表检索思路 大师们,Sql数据库我原来一个表里有10几万数据,很久让人给删了,怎么还原? win2003不支持sql2000 sp2 and below 怎么办? SQL2005打包 请问 FOR XML 的用法,急! 简单问题...取ID 各位,新年好! 请问:怎样将"103,234,890,345"这个字符串截取为103 234 890 345 这几个int类型的数字啊?
想问一下,是什么原因让你考虑需要增加一个过滤性质的表temp,而不是直接对A进行操作呢?
re2楼:这样未免太武断了吧,不但硬盘受不了,记录有100万条,磁盘的操作肯定会比比较操作慢很多!!
拷贝temp是很费时间,但是安全第一,否则我不就直接再A中修改了?
drop table dbo.[A] exec sp_rename 'dbo.temp','[A]'
就很快
不过要测试你的脚本和存储过程依赖关系。
而且实际上当temp修改检验完毕并更新A后,它还将接着进行下一步的修改和更新(如果A的字段不改的话),否则还得重新生成一个temp!不知这下说清楚没有,唉!!
你可以枚举所以动态字段,把所以字段值连接起来用函数CHECKSUM(或CHECKSUM_AGG) 生成一个哈希索引字段,按主键ID比较哈希索引就可以知道每条记录是不是更新,修改了。每个表的动态字段用信息视图INFORMATION_SCHEMA.COLUMNS得到。我也不知道明白没有
代码如下:
begin tran
delete from a where (条件是temp中属于a表但已经修改的记录)
insert into a
select (temp表中所有属于a表的字段) from temp where temp.主码 not in (select 主码 from a) and temp表中属于a表的记录
commit