我有个表a,是定时刷新数据的,外部程序也会定时的从这个表里面读取数据.刷新的时间频率和外部程序读取的频率都是可变的.我想保持数据的一致性,就是外部程序在读取的时候不要是我正在更新这个表或者刚好清空了的时候,目前更新这个表我是这样做的:
1. truncate table a
2. insert into a select *.....(因为要组织select语句,select可能需要短短的几秒钟时间)就怕外部程序在我刚好truncate的时候,或者插了一半的时候访问这个表造成数据不完整
我还有个想法,就是
1. insert into #b select *.....(先把数据插到临时表)
2. truncate table a
3. insert into a select * from #b
虽然不能保证外部程序不会在2和3的时候访问表a,但是和前面一种方法比,insert的时间会短很多,因为不用等select查询的时间了或者再这样
1. insert into b select *.....(先把数据插到正式表)
2. drop table a
3. EXEC sp_rename 'b', 'a'   
DDL操作应该快很多,但是如果刚好在2和3之间外部程序访问的话就会报错了...
请教一下该怎么弄好呢?