Importando dados em massa usando BULK INSERT ou OPENROWSET(BULK...)
Este tópico fornece uma visão geral de como usar a instrução Transact-SQL BULK INSERT e a instrução INSERT...SELECT * FROM OPENROWSET(BULK...) para importar dados em massa de um arquivo de dados em uma tabela Microsoft SQL Server. Este tópico também descreve considerações de segurança para usar BULK INSERT e OPENROWSET (BULK.) e usar esses métodos para importar em massa de uma fonte de dados remota.
Observação |
---|
Quando você usar BULK INSERT ou OPENROWSET (BULK...), é importante entender como SQL Server 2005 e versões posteriores tratam com a representação. Para obter mais informações, consulte "Considerações sobre segurança", posteriormente neste tópico. |
Instrução BULK INSERT
BULK INSERT carrega dados de um arquivo de dados em uma tabela. Essa funcionalidade é semelhante à fornecida pela opção in do comando bcp; no entanto, o arquivo de dados é lido pelo processo SQL Server. Para uma descrição da sintaxe de BULK INSERT, consulte BULK INSERT (Transact-SQL).
Exemplos
Para obter exemplos de BULK INSERT, consulte:
Exemplos de importação e exportação em massa de documentos XML
Mantendo valores nulos ou usando valores padrão durante a importação em massa
Uso do formato de caractere Unicode para importar ou exportar dados
Usando o formato nativo Unicode para importar ou exportar dados
Usando um arquivo de formato para ignorar uma coluna de tabela
Usando um arquivo de formato para mapear colunas de uma tabela para campos de arquivo de dados
Função OPENROWSET(BULK...)
O provedor de conjunto de linhas em massa OPENROWSET é acessado chamando a função OPENROWSET e especificando a opção BULK. A função OPENROWSET (BULK...) permite acessar dados remotos por meio da conexão com uma fonte de dados remota, como um arquivo de dados, por um provedor OLE DB.
Para importar dados em massa, chame OPENROWSET (BULK...) de uma cláusula SELECT...FROM dentro de uma instrução INSERT. A sintaxe básica para importar dados em massa é:
INSERT ... SELECT * FROM OPENROWSET(BULK...)
Quando usada em uma instrução INSERT, OPENROWSET(BULK...) oferece suporte a dicas de tela. Além das dicas de tabela comuns, como TABLOCK, a cláusula BULK pode aceitar as seguinte dicas de tabela especializadas: IGNORE_CONSTRAINTS (ignora somente as restrições CHECK), IGNORE_TRIGGERS, KEEPDEFAULTS e KEEPIDENTITY. Para obter mais informações, consulte Dicas de tabela (Transact-SQL).
Para obter informações sobre usos adicionais da opção de BULK, consulte OPENROWSET (Transact-SQL).
Exemplos
Para obter exemplos das instruções INSERT...SELECT * FROM OPENROWSET(BULK...), consulte os seguintes tópicos:
Considerações sobre segurança
Se um usuário usar um logon SQL Server, o perfil de segurança da conta de processo SQL Server será usado. Em contraste, se um usuário SQL Server efetuar logon usando Autenticação do Windows, esse usuário poderá ler só esses arquivos que podem ser acessados pela conta do usuário, independentemente do perfil de segurança do processo SQL Server.
Por exemplo, considere um usuário que efetuou logon em uma instância do SQL Server usando a Autenticação do Windows. Para que o usuário seja capaz de usar BULK INSERT ou OPENROWSET para importar dados de um arquivo de dados em uma tabela SQL Server, a conta do usuário requer acesso de leitura ao arquivo de dados. Com acesso ao arquivo de dados, o usuário poderá importar dados do arquivo em uma tabela mesmo se o processo SQL Server não tiver permissão para acessar o arquivo. O usuário não tem que conceder permissão do acesso de arquivo ao processo SQL Server.
SQL Server e Microsoft do Windows podem ser configurados para permitir que uma instância do SQL Server seja conectada a outra instância do SQL Server remetendo as credenciais de um usuário autenticado do Windows. Esse arranjo é conhecido como representação ou delegação. Compreender como o SQL Server 2005 e versões posteriores controlam a segurança por representação de usuário é importante quando você usar BULK INSERT ou OPENROWSET. Representação de usuário permite que o arquivo de dados resida em um computador diferente que o processo SQL Server ou o usuário. Por exemplo, se um usuário no Computador_A tiver acesso a um arquivo de dados no Computador_B, e a delegação de credenciais tiver sido definida adequadamente, o usuário poderá se conectar a uma instância do SQL Server que está sendo executada no Computador_C, acessar o arquivo de dados no Computador_B e importar dados em massa desse arquivo em uma tabela no Computador_C. Para obter mais informações, consulte Compreendendo a representação.
Observação |
---|
O modo pelo qual o SQL Server 2005 e versões posteriores controlam o acesso a arquivos remete a uma questão de segurança no Microsoft SQL Server 2000 e versões anteriores. Antigamente, depois que um usuário era autenticado, o acesso a arquivos externos baseava-se no perfil de segurança do processo SQL Server. Quando o processo SQL Server tinha lido acesso a um arquivo, para um usuário que não tinha acesso ao arquivo mas era um membro de uma função de servidor fixa bulkadmin, o usuário poderia importar o arquivo usando BULK INSERT e acessar os conteúdos do arquivo. |
Importando em massa de um arquivo de dados remoto
Para usar BULK INSERT ou INSERT...SELECT * FROM OPENROWSET(BULK...) para importar dados em massa de outro computador, o arquivo de dados deve ser compartilhado entre os dois computadores. Para especificar um arquivo de dados compartilhado, use sua UNC (Convenção de Nomenclatura Universal) que utiliza o formato geral **\\Servername\Sharename\Path\**Filename. Além disso, a conta usada para acessar o arquivo de dados deve ter as permissões necessárias para leitura do arquivo no disco remoto.
Por exemplo, a instrução BULK INSERT a seguir importa dados em massa na tabela SalesOrderDetail do banco de dados AdventureWorks2008R2 de um arquivo de dados denominado newdata.txt. Esse arquivo de dados reside em uma pasta compartilhada denominada \dailyorders em um diretório compartilhado de rede denominado salesforce em um sistema denominado computer2.
BULK INSERT AdventureWorks2008R2.Sales.SalesOrderDetail
FROM '\\computer2\salesforce\dailyorders\neworders.txt';
GO
Observação |
---|
Essa restrição não se aplica ao utilitário bcp porque o cliente lê o arquivo independentemente do SQL Server. |
Consulte também