Sql server 如何在MS SQL Server中在一个原子操作中重命名两个表

Sql server 如何在MS SQL Server中在一个原子操作中重命名两个表,sql-server,Sql Server,我已经用更新的数据建立了一个新的临时表,我想用新的临时表替换现有的引用表。在MS SQL Server中,如何以原子方式执行此操作,以便引用表对访问数据库的其他进程永远不会无效 我的SQL也有类似的问题:供参考,以下是我从@Alejandro上面的评论中得出的解决方案: BEGIN TRANSACTION DROP TABLE ReferenceData EXEC sp_rename 'NewReferenceData', 'ReferenceData' COMMIT 如果临时表完全相同,则可

我已经用更新的数据建立了一个新的临时表,我想用新的临时表替换现有的引用表。在MS SQL Server中,如何以原子方式执行此操作,以便引用表对访问数据库的其他进程永远不会无效


我的SQL也有类似的问题:

供参考,以下是我从@Alejandro上面的评论中得出的解决方案:

BEGIN TRANSACTION
DROP TABLE ReferenceData
EXEC sp_rename 'NewReferenceData', 'ReferenceData'
COMMIT
如果临时表完全相同,则可以使用分区切换

您不需要Enterprise Edition,也不需要对表进行分区

这些表需要具有相同的列定义,包括精度/长度/排序规则、相同的聚集索引和非聚集索引,最重要的是,需要具有相同的文件组,因此它们不能是临时表或表变量

这种技术非常快,不会导致其他查询表的人丢失对象错误

设置XACT_ABORT,不计数为ON;-如果会话被终止,则强制立即回滚 开始训练; 截断表myTargetTable;-目标必须为空 将表myStaging开关更改为myTargetTable 当等待\u处于\u低\u优先级时,最大\u持续时间=1分钟,等待\u后中止\u=阻塞器; -不一定要在低优先级时使用WAIT\u,但最好是阻塞 -使用SELF而不是拦截器终止您自己的会话 -将“最大持续时间”设置为0,以立即强制关闭拦截器 提交传输;
有关更多详细信息,请参见

仅使用事务。其他进程将被阻止,直到操作完成。这是指向有关在ms server中重命名表的文档的链接使用事务-当您大声说出来时很明显:Thanksan其他选项可以在表的顶部查看。和单个ALTER VIEW常量_名称作为SELECT。。。从新的\u选项卡\u名称更改表。。。SWITCH是一个非常酷的特性,不需要企业版,任何时候都看不到任何不存在的表