Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 原子表的快速更换_Sql Server 2005 - Fatal编程技术网

Sql server 2005 原子表的快速更换

Sql server 2005 原子表的快速更换,sql-server-2005,Sql Server 2005,我有一个相当简单的命令,偶尔会运行: BEGIN TRAN T1; truncate table mytable insert into mytable select name from myview COMMIT TRAN T1; 这个命令有两个丑陋的副作用:首先,mytable上的select请求经常超时。其次,mytable上的select请求有时不返回结果。我不关心它是否返回预事务结果或事务后结果,但不希望它返回中间的任何东西,或者超时。我想到的一个解决方案几乎肯定会有所帮助,就是首先

我有一个相当简单的命令,偶尔会运行:

BEGIN TRAN T1;
truncate table mytable
insert into mytable select name from myview
COMMIT TRAN T1;
这个命令有两个丑陋的副作用:首先,mytable上的select请求经常超时。其次,mytable上的select请求有时不返回结果。我不关心它是否返回预事务结果或事务后结果,但不希望它返回中间的任何东西,或者超时。我想到的一个解决方案几乎肯定会有所帮助,就是首先将视图复制到临时表中(因为视图有点昂贵)。这并不能完全解决问题,但它几乎肯定会使窗口变得足够窄,从而使问题被忽略。坦率地说,窗口已经窄到可以忽略它了,但我不喜欢忽略它。另一个解决方案是疯狂过度工程的一个示例,它将使用两个表(例如,双缓冲区)替换该表,并调用最新的、正确填充的表


是否有一个更优雅的方法来替换一个新的表?

< P>没有人会在中间看到任何东西。如果他们这样做了,那就意味着你在做肮脏的阅读,你应该得到你得到的每一个坏结果


您可以使用ALTERTABLE。。。交换机分区。。。在另一个表的内容中进行“切换”(必须具有相同的结构和约束)。该操作是原子化的,速度非常快,它只需更改周围的一些元数据指针,就可以让内容“神奇地”移动到目标表中。看见源表和目标表都不需要显式地“分区”,切换操作也可以在普通的单分区表上工作。

有一种
ALTER TABLE switch
技术,或者您可以使用sp_rename-all。

您使用的是什么事务隔离级别?我不知道如何设置它或使用什么。