Usuário com melhor resposta
Bulk Insert SQL SERVER

Pergunta
-
Ola, Pessoal,
Estou com a seguinte situação, quero importar um arquivo txt delimitado por ; cuja quantidade de colunas varía.
Ex:
1;FuncionarioA; 1000;
2; FuncionarioB;
3; Cliente; 200; rua A
O Código é o seguinte:
ID int,
Nome varchar(60),
Renda int,
Endereço varchar(40))
BULK INSERT SPEDC_TABPONTE
FROM 'C:\Users\Usuario\Desktop\Usuarios.txt'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = ';\n',
KEEPNULLS
)
Só que quando a coluna não existe no arquivo, o bulk insert alimenta com os dados da linha seguinte, automaticamente,
o q desemparelha as informações;
Como faço para que quando não existir mas dados na linha do arquivo txt.
O bulk insert va alimentar o da linha seguinte?
Alguem Poderia me ajudar?
Respostas
-
Alex,
Tal caracteristica até aonde eu sei não conseguira ser tratada pelo sql server, normalmente esses arquivos delimitados, ainda que não possua valores na coluna, a coluna existe como ;; para não causar justamente este tipo de erro, não vejo maneira nenhuma de realizar isso a não ser:
(Sim, é um trabalho grande....)
- Importe o arquivo para uma tabela contando apenas com quebra de linha, como quebra de coluna, coloque um caracter que não exista (¢ por exemplo), assim voce importara uma linha para uma tabela e ficara tipo:
SELECT Campo
FROM TabelaQueRecebeuOImport
Resultado:
Fabrizzio Caputo;20;Masculino
Camila Lira;19;Feminino;20120101
Giovanni Caputo;17;Masculino
Note que o segundo registro possui uma coluna a mais, porem para sua tabela esta tudo em um só.
Então, voce deve criar um processo que va lendo em relação as virgular linha a linha e inserindo na tabela final.
Como dica: Evite arquivos dessa natureza, se for passar por algumas auditorias ISO, arquivos dessa forma no processo contam pontos negativos.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Heloisa Pires sexta-feira, 15 de junho de 2012 13:45
- Marcado como Resposta Heloisa Pires terça-feira, 3 de julho de 2012 11:53
Todas as Respostas
-
Alex,
Tal caracteristica até aonde eu sei não conseguira ser tratada pelo sql server, normalmente esses arquivos delimitados, ainda que não possua valores na coluna, a coluna existe como ;; para não causar justamente este tipo de erro, não vejo maneira nenhuma de realizar isso a não ser:
(Sim, é um trabalho grande....)
- Importe o arquivo para uma tabela contando apenas com quebra de linha, como quebra de coluna, coloque um caracter que não exista (¢ por exemplo), assim voce importara uma linha para uma tabela e ficara tipo:
SELECT Campo
FROM TabelaQueRecebeuOImport
Resultado:
Fabrizzio Caputo;20;Masculino
Camila Lira;19;Feminino;20120101
Giovanni Caputo;17;Masculino
Note que o segundo registro possui uma coluna a mais, porem para sua tabela esta tudo em um só.
Então, voce deve criar um processo que va lendo em relação as virgular linha a linha e inserindo na tabela final.
Como dica: Evite arquivos dessa natureza, se for passar por algumas auditorias ISO, arquivos dessa forma no processo contam pontos negativos.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Heloisa Pires sexta-feira, 15 de junho de 2012 13:45
- Marcado como Resposta Heloisa Pires terça-feira, 3 de julho de 2012 11:53
-
Alex,
Se que ao invês de utilizar o Bulk Insert, não poderíamos utilizar o BCP trabalhando também com arquivos formatados, no caso, arquivos .fmt?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-