O comando Bulk Insert do SQL Server, serve para importar (copiar) dados de um arquivo texto ou arquivos nativos do SQL Server (mais conhecidos como flat).
É um modo mais rápido de se efetuar a importação de dados. Apesar dele ler arquivos texto, como por exemplo arquivos.txt, a estrutura têm que estar baseado em uma estrutura do tipo flat.
Para exemplificar como se utiliza este comando, irei criar a seguinte tabela na base de dados:
If Exists(SELECT * FROM Sys.Tables WHERE Name = N'TB_IMPORT_CVS' And Type = N'U') DROP TABLE TB_IMPORT_CVS GO CREATE TABLE TB_IMPORT_CVS ( id int NULL ,nome varchar(20) NULL ,idade int NULL )
Após a criação da tabela, iremos criar um arquivo.txt seguindo a estrutura da tabela. Copie o conteúdo abaixo e salve este arquivo no C:\ (se preferir outra pasta, lembrar de alterar o caminho do mesmo no código TL-SQL) e salve como Imports.txt:
1, Marina, 21
2, Alan, 22
3, Adilson, 53
4, Maria Aparecida, 51
5, Alex, 15
Após gravarmos a estrutura do arquivo (neste caso seguindo exatamente a ordem dos campos na tabela), iremos executar o comando que irá realizar a importação dos dados no arquivo texto para a tabela na base de dados. Mas antes, é importante entendermos como funciona o comando. O comando basicamente é:
-- Linha inicial do comando: BULK INSERT e o nome da tabela onde os dados serão importados BULK INSERT TABELA -- FROM e o caminho e nome do arquivo onde estão os dados FROM 'C:\Arquivo.txt' -- E os parâmetros à serem utilizados WITH( CODEPAGE='ACP', -- Faz que com os acentos sejam incluidos na importação. MAXERRORS = 0, -- Define a quantidade máxima de erros que pode ocorrer numa importação de dados FIRSTROW = 1, -- Define qual será a primeira linha a ser importada LASTROW = 10 -- Define qual será a última linha a ser importada )
Link do MSDN listando todos os parâmetros
Agora podemos executar o nosso comando de teste:
-- Executando o comando para importar os dados de um arquivo TXT BULK INSERT TB_IMPORT_CVS FROM 'C:\Imports.txt' WITH( FIELDTERMINATOR = ',' -- Caractere usado para separar uma coluna da outra -- (o default é o caractere [TAB], representado por \t; ,ROWTERMINATOR = '\n' -- Define caractere usado para separar uma linha (registro) da outra -- (o default é o [ENTER], representado por \n ,MAXERRORS = 0 )
Se o comando for executado com sucesso, é só efetuar o SELECT para ver se a importação foi realizada com sucesso:
SELECT * FROM TB_IMPORT_CVS
É isso aí!