当前位置:  开发笔记 > 编程语言 > 正文

交换ms-sql表

如何解决《交换ms-sql表》经验,为你挑选了1个好方法。

我想以最好的方式交换表.
我有一个IpToCountry表,我根据我导入的外部CSV文件每周创建一个新表.

我发现进行切换的最快方法是执行以下操作:

sp_rename IpToCountry IpToCountryOld
go
sp_rename IpToCountryNew IpToCountry
go

这样做的问题是仍然可以在两者之间访问该表.
如何在SQL中解决此问题?
考虑使用sp_getapplock和sp_releaseapplock,但我希望尽快保持对表函数的读取.



1> LukeH..:

假设您无法更新/插入现有表,为什么不使用视图包装对表的所有访问权限?

例如,您最初可能将数据存储在名为IpToCountry20090303的表中,您的视图将如下所示:

CREATE VIEW IpToCountry
AS
SELECT * FROM IpToCountry20090303

当新数据进入时,您可以创建并填充IpToCountry20090310表.填充表后,只需更新您的视图:

ALTER VIEW IpToCountry
AS
SELECT * FROM IpToCountry20090310

该开关将完全是原子的,无需任何显式锁定或事务.视图更新后,您只需删除旧表(或者如果您愿意,可以保留它).

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有