Novembro 7th, 2016 Por suporte

sql-icon

Muitos programadores costumam executar vários comandos INSERT quando pretendem inserir múltiplos registros em uma tabela de banco de dados. Porém, quando os dados serão salvos na mesma tabela, não é necessário executar diversos comandos INSERT; apenas um é suficiente.

Por exemplo: em vez de executar:

INSERT INTO tabela(numero) VALUES (1);
INSERT INTO tabela(numero) VALUES (2);
...

Poderíamos executar:

INSERT INTO tabela(numero) VALUES (1), (2);

Vou mostrar uma maneira simples de se fazer isso dinamicamente, com quantidade indeterminada informações, que podem vir de qualquer tipo de fonte de dados.

Vamos considerar um array com números inteiros, de 1 a 10:

$valores = range( 1 , 10 );

Para inserir isso num banco de dados, muitos fariam isto:

$valores = range( 1 , 10 );
for ( $i = 0, $total = count( $valores ); $i < $total; $i++ )
{
    $DB->query( 'INSERT INTO tabela(numero) VALUES
(' . $valores[ $i ] . ')' );
}

Isso funciona. Mas é lento e sobrecarrega o servidor. Imaginem um array com 100 mil valores. Seriam executados 100 mil consultas no banco.

Esse problema é conhecido como O Problema do N + 1. Clique aqui e leia mais sobre isso.

Como Gerar Uma Única SQL Para Inserir Múltiplos Registros

O correto é gerar a string SQL com todos os valores a serem inseridos, separados por vírgula, de forma a executar a consulta apenas uma vez.

Logo, podemos fazer isto:

$valores = range( 1 , 10 );
$sql = sprintf( 'INSERT INTO tabela(numero) VALUES (%s)', implode( '), 
(' , $valores ) );
$DB->query( $sql );

Se dermos um echo em $sql, teremos como saída:

INSERT INTO tabela(numero) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)

Dessa forma só se executa a SQL uma vez, tornando a execução bem mais rápida.

Fonte: http://rberaldo.com.br/inserindo-multiplos-registros-em-tabela-de-banco-de-dados/

Publicado em Infovida Etiquetas: ,

Novembro 7th, 2016 Por suporte

Uma das novidades do SQL Server 2008 em relação às versões anteriores é uma sintaxe alternativa para o comendo INSERT que permite a inserção de múltiplas linhas através da execução de um único comando.

A nova estrutura permite declarar várias linhas entre parênteses, separadas por vírgulas. Veja esta opção de sintaxe:

INSERT INTO tabela (coluna1,coluna2, coluna3)
VALUES (valor1,valor2,valor3),(valor4,valor5,valor6),(valor7,valor8,valor9)

Assim, pode-se substituir scripts como este:

INSERT INTO Contato(nome,email,telefone)
VALUES (‘Evandro’,’evandro@email.com’,’3456-7890′)
INSERT INTO Contato(nome,email,telefone)
VALUES (‘Ronaldo’,’contato@ronaldo.com.br’,’8765-5432′)
INSERT INTO Contato(nome,email,telefone)
VALUES (‘Mariana’,’mariana@email.com’,’3344-9988′)
INSERT INTO Contato(nome,email,telefone)
VALUES (‘José’,’falecom@jose.com’,’5678-1011′)

Por estruturas como esta:

INSERT INTO Contato(nome,email,telefone)
VALUES
(‘Evandro’,’evandro@email.com’,’3456-7890′),
(‘Ronaldo’,’contato@ronaldo.com.br’,’8765-5432′),
(‘Mariana’,’mariana@email.com’,’3344-9988′),
(‘José’,’falecom@jose.com’,’5678-1011′)

Este modelo já vem sendo utilizado nos exemplos deste blog, pois diminui o tamanho dos scripts gerados e também facilita a vida do desenvolvedor SQL.

Fonte: http://www.sqlserverdicas.com/2011/06/inserindo-multiplas-linhas-com-um-unico.html

Publicado em Tutos e Dicas Etiquetas: ,