Um dos INSERT INTO
scripts é escrito da seguinte forma.
INSERT INTO tableName (Column1, Column2,....) VALUES (value1, Value2,...), (value1, Value2,...),....
A seguir está o erro que estamos enfrentando ao analisar acima da instrução de inserção
Msg 10738, Level 15, State 1, Line 1007 O número de expressões de valor de linha na instrução INSERT excede o número máximo permitido de 1.000 valores de linha.
Minha pergunta simples é que, podemos alterar o limite de 1000 valores?
Não. Essa restrição codificada existe por boas razões relacionadas ao possível tempo excessivo de compilação do plano de consulta. Você pode contornar isso listando as
VALUES
cláusulas em um CTE e depoisINSERT
no CTE, mas eu não recomendo.Divida a
INSERT
instrução emVALUES
cláusulas de <= 1.000 linhas cada como uma solução alternativa ou use um método alternativo de carregamento de dados, comobcp
ouBULK INSERT
. A questão fundamental pode ser abordada em uma versão futura do SQL Server . Veja também a ótima resposta de Martin Smith no Stack Overflow.Solução alternativa não recomendada:
violino
Solução CTE (sem erro, não recomendado!):
violino
Você pode usar a seguinte sintaxe:
e assim por diante. Não há restrição no número de linhas inseridas.
Para selecionar usando VALUES você pode ir além do limite de 1000
Confira os documentos oficiais:
https://learn.microsoft.com/en-us/sql/t-sql/queries/table-value-constructor-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
Você pode escrever a consulta desta maneira: