Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

André Marcondes

commit que não para no caso de um item der errado

Recommended Posts

Ola

 

tenho uma query assim:

 

INSERT INTO tabela VALUES
   ('fulano', 4587, 2010-15-08, 3),
   ('cicrano', 5454, 2010-29-08, 13),
   ('beltrano', 4532, 2010-13-05,7) 

 

Só que acontece que se um dos inserts der errado, nenhum dos inserts é inserido.

Existe como fazer com que os outros sejam inseridos mesmo que um dê errado?

 

Desde já agradeço.

 

Corrigindo: NÃO TEM NADA A VER COM COMMIT :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ha varias maneiras, gostaria de saber como voce monta o insert...

Na mão? Via script? Magia negra? rs

 

INSERT INTO tabela ( campo01, campo02,campo03, campo04) VALUES ('fulano', 4587, 2010-15-08, 3);

INSERT INTO tabela ( campo01, campo02,campo03, campo04) VALUES ('cicrano', 5454, 2010-29-08, 13);

INSERT INTO tabela ( campo01, campo02,campo03, campo04) VALUES ('beltrano', 4532, 2010-13-05,7);

 

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho um arquivo de texto que será importado para a base de dados.

 

Esse arquivo é enorme e precisa ser importado em pouco tempo, por isso decido fazer o insert de várias linhas do arquivo de uma só vez, no caso, de 1000 em 1000.

 

Existe um loop em um script que vai percorrendo esse arquivo e inserindo cada parêntese em um array. Depois eu percorro esse array montando a query e quando um determinado contador atinge 1000 eu executo o insert.

 

Devido à grande queda de performance que existe ao se executar uma query a cada laço do loop, eu optei por inserir dessa forma, pois assim menos recursos de I/O são necessários.

 

Da forma que "supernoi" me mostrou, será que executar várias querys separadas dentro de um único mssql_query() demandaria uma ligação de I/O para cada declaração ou apenas uma (o que seria o essencial)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ha varias maneiras, gostaria de saber como voce monta o insert...

Na mão? Via script? Magia negra? rs

 

INSERT INTO tabela ( campo01, campo02,campo03, campo04) VALUES ('fulano', 4587, 2010-15-08, 3);

INSERT INTO tabela ( campo01, campo02,campo03, campo04) VALUES ('cicrano', 5454, 2010-29-08, 13);

INSERT INTO tabela ( campo01, campo02,campo03, campo04) VALUES ('beltrano', 4532, 2010-13-05,7);

 

=)

 

 

@andre, do modo que postou somente a primeira linha é inserida. O SQL nao reconhece um comando insert seguido de varias linhas. Ou faz-se um While ou como o @supernoi postou.

 

@supernoi, magia negra??? essa eu ri :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, como assim? o sql server não reconhece isto?

 

INSERT INTO tabela VALUES
   ('fulano', 4587, 2010-15-08, 3),
   ('cicrano', 5454, 2010-29-08, 13),
   ('beltrano', 4532, 2010-13-05,7) 

 

 

Sei não....

O meu servidor mssql aqui reconhece...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a versao do SQL?

Se for 2008, voce pode criar um pacote DTSx, pelo VS e chamar pelo ASP ou qq linguagem.

Eu importo arquivos de 15gb sem problemas deste modo.

 

Abçs

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, como assim? o sql server não reconhece isto?

 

INSERT INTO tabela VALUES
   ('fulano', 4587, 2010-15-08, 3),
   ('cicrano', 5454, 2010-29-08, 13),
   ('beltrano', 4532, 2010-13-05,7) 

 

 

Sei não....

O meu servidor mssql aqui reconhece...

 

 

Roda isso no MMS do SQL:

declare @tabela table (a varchar(500), b int, c datetime, d int)

INSERT INTO @tabela VALUES 
   ('fulano', 4587, '2010-15-08', 3), 
   ('cicrano', 5454, '2010-29-08', 13), 
   ('beltrano', 4532, '2010-13-05',7) 

 

:P

 

 

Pode usar o BCP para fazer o import do arquivo...

 

http://msdn.microsof...y/aa337544.aspx

 

=)

Dicas do BCP para importar TXts

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

sobre o que @jus2ka pediu pra rodar:

 

não da certo pq o formato de data esta errado.

 

Teria de ser:

 

declare @tabela table (a varchar(500), b int, c datetime, d int)

INSERT INTO @tabela VALUES 
   ('fulano', 4587, '2010-08-15', 3), 
   ('cicrano', 5454, '2010-08-29', 13), 
   ('beltrano', 4532, '2010-05-15',7) 

 

aí funciona normal (3 rows affected)

Compartilhar este post


Link para o post
Compartilhar em outros sites

sobre o que @jus2ka pediu pra rodar:

 

não da certo pq o formato de data esta errado.

 

Teria de ser:

 

declare @tabela table (a varchar(500), b int, c datetime, d int)

INSERT INTO @tabela VALUES 
   ('fulano', 4587, '2010-08-15', 3), 
   ('cicrano', 5454, '2010-08-29', 13), 
   ('beltrano', 4532, '2010-05-15',7) 

 

aí funciona normal (3 rows affected)

 

O meu nao roda, mas vamos voltar ao assunto do post, depois a gente volta nisso.

 

Qual a versao do seu SQL? 2008?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei usar, mas quanto mais eu leio o manual online do sql server, mais coisa tem que saber, é muito complicado. Desisti.

 

 

Cara, no post #10 foi dado a dica completa, é só substituir a conexao pelos dados do seu servidor! Esta com dificuldade em fazer funcionar na sua aplicação?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.