Para ilustrar minha pergunta, segue uma consulta detectando o id do pedido que não foi inserido em um data warehouse e os insere:
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);
Digamos que a consulta seja executada pela primeira vez e Orders
contenha 400 milhões de linhas ou mais:
O SQL Server pode lidar com esse número de linhas em uma única INSERT
instrução?
Se não, como devo proceder? Devo limitar o número de linhas buscadas na INSERT
instrução? Quantas linhas o mecanismo pode manipular em uma única INSERT
instrução?
De acordo com a documentação, a única limitação no número de linhas armazenadas por tabela é a seguinte
Quais recursos locais isso inclui potencialmente ?
Quanto ao quanto uma única instrução SELECT pode extrair, não consigo encontrar nenhuma documentação relacionada a isso diretamente, mas suponho que seja seguro considerar exatamente o mesmo que o acima.
Não parece haver um limite de linha, exceto no que se refere aos recursos. Se o seu SQL Server realmente tiver recursos suficientes para inserir meio bilhão de linhas, ele fará isso. No passado, eu me deparei com essas restrições de recursos, então eu adicionaria uma cláusula WHERE que limitava o conjunto de resultados. Ou eu executaria o INSERT recursivamente com um TOP no select.