mg1*_*075 4 sql t-sql relational-database sql-server-2008
我只有少数几个永久性的桌子,需要每晚进行重建。
为了使这些表尽可能长时间保持“活动”状态,并提供仅备份前一天数据的可能性,另一位开发人员隐约地建议在夜间构建时采用类似的方法:
创建一个永久表(构建版本;例如,tbl_build_Client)
重命名活动表(tbl_Client被重命名为tbl_Client_old)
将构建版本重命名为实时版本(tbl_build_Client重命名为tbl_Client)
要重命名表,将使用sp_rename。
http://msdn.microsoft.com/en-us/library/ms188351.aspx
您是否看到任何更有效的方法来解决此问题,或者该方法存在严重缺陷?提前致谢。
更新资料
试图冲刷gbn的答案和建议以使用同义词,这是一种合理的方法,还是我得到了一些可怕的错误?
“客户”的三个真实表:
1. dbo.build_Client
2. dbo.hold_Client
3. dbo.prev_Client
由于“客户端”是其他proc引用“客户端”数据的方式,因此默认同义词为
CREATE SYNONYM Client
FOR dbo.hold_Client
Run Code Online (Sandbox Code Playgroud)
然后采取以下步骤刷新数据,但保持不间断的访问。
(1.a。)TRUNCATE dbo.prev_Client(具有昨天的数据)
(1.b。)INSERT INTO dbo.prev_Client来自dbo.build_Client的记录,因为dbo.build_Client仍然具有昨天的数据
(2.a.)TRUNCATE dbo.build_Client
(2.b.) INSERT INTO dbo.build_Client从新数据构建过程
(2.c.)的新数据构建更改同义词
DROP SYNONYM Client
CREATE SYNONYM Client
FOR dbo.build_Client
Run Code Online (Sandbox Code Playgroud)
(3.a.)TRUNCATE dbo.hold_Client
(3.b.)dbo.build_Client (3.c.)中 INSERT INTO dbo.hold_Client的记录
更改了同义词
DROP SYNONYM Client
CREATE SYNONYM Client
FOR dbo.hold_Client
Run Code Online (Sandbox Code Playgroud)
使用间接避免直接操作表:
您可以用来SELECT base_object_name FROM sys.synonyms WHERE name = 'Client'计算当前的间接寻址是什么
这适用于所有版本的SQL Server:另一种方法是“分区切换”,它需要企业版