为了说明我的问题,以下是一个查询,检测尚未插入数据仓库的订单 ID 并插入它们:
With NewOrders
As
(
Select OrderID From Orders
Except
Select OrderID From FactOrders
)
Insert Into FactOrders(OrderID, OrderDate, CustomerId)
Select OrderID, OrderDate, CustomerId From Orders
Where OrderID in (Select OrderID from NewOrders);
假设第一次运行查询并Orders
包含 4 亿行或更多行:
SQL Server 可以在一条INSERT
语句中处理这么多行吗?
如果没有,我应该如何进行?INSERT
我应该限制语句中提取的行数吗?INSERT
引擎在一条语句中可以处理多少行?
根据文档,每个表存储的行数的唯一限制如下
这可能包括哪些本地资源?
至于单个 SELECT 语句可以提取多少,我找不到与此直接相关的任何文档,但我认为将其与上述完全相同是安全的。
似乎没有行限制,除非它与资源有关。如果您的 SQL Server 确实有足够的资源来插入十亿行,那么它就会这样做。过去,我一直面临这样的资源限制,所以我会添加一个限制结果集的 WHERE 子句。或者我会在选择时使用 TOP 递归地运行 INSERT。