Bulk Insert – SQL Server

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

resultado

É isso aí!