Podemos usar o comando BULK INSERT do SQL Server para copiar (importar) dados de um arquivo-texto ou nativo do SQL Server (também chamados de flat file).
É o modo mais rápido de se importar dados; porém somente trabalha em uma direção e com um tipo de arquivo: flat file. Iniciamos nosso exemplo criando a estrutura, usando o SSMS (SQL Server Management Studio) do SQL Server 2005:
USE MASTER
IF EXISTS(SELECT * FROM SYSDATABASES WHERE NAME = ‘EXEMPLO_COPIA’)
DROP DATABASE EXEMPLO_COPIA
–
CREATE DATABASE EXEMPLO_COPIA
GO
–
USE EXEMPLO_COPIA
–
CREATE TABLE PRODUTO
(
COD INT,
NOME VARCHAR(50),
PRECO DEC(9,2)
)
Em seguida, criamos o arquivo-texto que contém os dados que serão importados.
Ainda no SSMS, executamos o seguinte comando:
BULK INSERT PRODUTO
FROM ‘C:\PRODUTOSTAB.TXT’
Agora fazemos um select para confirmar a importação:
SELECT * FROM PRODUTO
No final do select vemos que os acentos não foram importados corretamente. Para corrigir isso atribuímos o valor ACPao parâmetro CODEPAGE.
BULK INSERT PRODUTO
FROM ‘C:\PRODUTOSTAB.TXT’
WITH (CODEPAGE=‘ACP’)
Tome o cuidado de truncar a tabela (apagar os dados) antes de importar novamente. Para essa tarefa, use o comando:
TRUNCATE TABLE PRODUTO
Os parâmetros mais usados do BULK INSERT são:
- CODEPAGE - define a página de códigos a ser usada na importação - e, por consequência, se os caracteres vêm acentuados ou não;
- MAXERRORS - define a quantidade máxima de erros que pode ocorrer numa importação de dados;
- FIELDTERMINATOR - caractere usado para separar uma coluna da outra (o default é o caractere TAB, representado por \t;
- ROWTERMINATOR - caractere usado para separar uma linha (registro) da outra (o default é o ENTER, representado por \n;
- FIRE_TRIGGERS - se informado, dispara as triggers na execução do comando (por default o BULK INSERT não dispara triggers);
- KEEP_IDENTITY - se informado, impede que a numeração automática (coluna identity da tabela) seja usada - vai “obedecer” os códigos informados;
- FORMATFILE - define qual o arquivo de formato será usado na importação;
- FIRSTROW - define qual será a primeira linha importada;
- LASTROW - define qual será a última linha importada.
Por exemplo:
BULK INSERT PRODUTO
FROM ‘C:\PRODUTOSTAB.TXT’
WITH
(
FORMATFILE=‘C:\PRODUTOSTAB.FMT’,
CODEPAGE=‘ACP’,
MAXERRORS = 0,
FIRE_TRIGGERS,
FIRSTROW = 1,
LASTROW = 10
)