Sei que fiz isso antes de anos atrás, mas não me lembro da sintaxe e não consigo encontrá-la em nenhum lugar devido à obtenção de vários documentos e artigos de ajuda sobre "importações em massa".
Aqui está o que eu quero fazer, mas a sintaxe não está exatamente correta ... por favor, alguém que já fez isso antes, me ajude :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Eu sei que isso está próximo da sintaxe correta. Talvez eu precise da palavra "GRANEL" lá dentro, ou algo do tipo, não me lembro. Qualquer ideia?
Eu preciso disso para um banco de dados SQL Server 2005. Eu tentei esse código, sem sucesso:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
Estou entendendo Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Timothy Khouri
fonte
fonte
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
"VALUES" apenas aparece uma vez e precisa de vírgulas entre os conjuntos.Respostas:
No SQL Server 2008, você pode fazer isso em uma cláusula VALUES exatamente conforme a declaração da sua pergunta (você só precisa adicionar uma vírgula para separar cada declaração de valores) ...
fonte
INSERT table (columnlist)
select
você cria um conjunto com colunas e linhas e, por design, essas linhas podem serinsert
editadas em outra tabela com uma quantidade igual de colunas. Você pode até usar uma mistura de literais e valores. Por exemplo, usarinsert
withselect 'A', ID from ATable
inseria 'A' sempre na primeira coluna e o valor da coluna ID da linha correspondente de ATable na segunda coluna.Sua sintaxe quase funciona no SQL Server 2008 (mas não no SQL Server 2005 1 ):
1 Quando a pergunta foi respondida, não ficou evidente que a pergunta estava se referindo ao SQL Server 2005. Estou deixando essa resposta aqui, pois acredito que ainda é relevante.
fonte
Se seus dados já estão no seu banco de dados, você pode:
Se você precisar codificar os dados, o SQL 2008 e as versões posteriores permitem fazer o seguinte ...
fonte
Usando
INSERT INTO ... VALUES
sintaxe como na resposta de Daniel Vassallo, há uma limitação irritante:A maneira mais fácil de omitir essa limitação é usar tabela derivada como:
LiveDemo
Isso funcionará a partir do SQL Server 2008 ou superior
fonte
C. Specifying multiple values as a derived table in a FROM clause
Você poderia fazer isso (feio, mas funciona):
fonte
Isso alcançará o que você está perguntando:
Para futuros desenvolvedores, você também pode inserir de outra tabela :
Ou mesmo de várias tabelas :
fonte
Você pode usar uma união:
fonte
Isso parece bom para o SQL Server 2008. Para SS2005 e versões anteriores, você precisa repetir a instrução VALUES.
EDIT :: Meu mal. Você deve repetir o 'INSERT INTO' para cada linha no SS2005.
fonte
Seria mais fácil usar XML no SQL Server para inserir várias linhas, caso contrário, isso se tornará muito tedioso.
Veja o artigo completo com explicações de código aqui http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Copie o código a seguir no sql server para visualizar uma amostra.
fonte
OU VOCÊ PODE USAR DE OUTRA MANEIRA
fonte
Eu tenho usado o seguinte:
Ele adicionará dez linhas com GUIDs exclusivos para ID e Nome.
Nota: não termine a última linha (GO 10) com ';' porque lançará um erro: Ocorreu um erro fatal de script. Sintaxe incorreta foi encontrada ao analisar o GO.
fonte
Correspondendo a INSERT (Transact-SQL) (SQL Server 2005), você não pode omitir
INSERT INTO dbo.Blah
e precisa especificá-lo toda vez ou usar outra sintaxe / abordagem,fonte
Isso está funcionando muito rápido e é eficiente em SQL. Suponha que você tenha tabela
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Portanto, você não pode inserir vários registros nesta tabela usando a consulta a seguir sem repetir a instrução insert,
Também com C # usando
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Você pode inserir 10 linhas por vez
fonte
Em uma inserção multititativa, você insere linhas calculadas derivadas das linhas retornadas da avaliação de uma subconsulta em uma ou mais tabelas.
INSERT ALL incondicional : - Para adicionar várias linhas a uma tabela de uma só vez, use o seguinte formulário da instrução INSERT:
Especifique ALL seguido de várias insert_into_clauses para executar uma inserção multitable incondicional. O Banco de Dados Oracle executa cada insert_into_clause uma vez para cada linha retornada pela subconsulta.
Consulta de inserção de linha única
fonte
Outros aqui sugeriram algumas sintaxes de vários registros. Explicando isso, sugiro que você insira uma tabela temporária primeiro e insira sua tabela principal a partir daí.
O motivo disso é que o carregamento dos dados de uma consulta pode demorar mais e você pode bloquear a tabela ou as páginas por mais tempo do que o necessário, o que atrasa outras consultas em execução nessa tabela.
Além disso, seus IDs provavelmente devem ser de identidade (1,1) e você provavelmente não deve inseri-los, na grande maioria das circunstâncias. Deixe o SQL decidir essas coisas para você.
fonte