我正在实现一个A/B/View场景,这意味着View指向表A,而当表B更新时,会发生切换,此时视图会指向表B,同时加载表A。
每天都会进行一次切换。有数百万行需要更新,数千个用户查看该视图。我使用的是SQL Server 2012。
我的问题是:
- 如何以最快的方式(在存储过程中)从另一个表中插入数据到一个表中?
- 是否有使用 BULK INSERT 的方法?或者,使用常规的 insert/select 是最快的方法吗?
我正在实现一个A/B/View场景,这意味着View指向表A,而当表B更新时,会发生切换,此时视图会指向表B,同时加载表A。
每天都会进行一次切换。有数百万行需要更新,数千个用户查看该视图。我使用的是SQL Server 2012。
我的问题是:
SELECT fieldnames
INTO DestinationTable
FROM SourceTable
你可以简单地这样做
select * into A from B Where [criteria]
根据条件从B中选择数据,并将其插入到A中,前提是列相同或者您可以指定列名而不是使用*。
INSERT... SELECT...
函数与BULK INSERT
的功能非常相似。像@GarethD所说的那样,你可以使用SSIS,但是如果你只是从table1复制行到table2,那可能会过于复杂。
如果你要复制大量的数据,请注意事务日志——在进行大型插入操作时,它可能会迅速增长。一个解决方法是通过循环执行插入语句来对要插入的数据进行分块处理,比如每次处理100,000或10,000行(取决于你的行有多宽,即每次传输多少MB)。
(只是好奇,你是用ALTER VIEW
重置视图吗?我曾经做过类似的事情,不过我们需要四个表和四个视图来支持过去/现在/未来/交换集。)
SELECT *
类型功能,同义词会更有效率。它们在跨数据库引用方面也非常有用。 - Philip Kelley