Importar dados em massa usando BULK INSERT ou OPENROWSET(BULK...) (SQL Server)
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 importação em massa de dados de um arquivo de dados em uma tabela do SQL Server. Este tópico também descreve considerações de segurança sobre o uso de BULK INSERT e OPENROWSET(BULK...) e o uso desses métodos para importação em massa de uma fonte de dados remotos.
Observação |
---|
Para usar BULK INSERT ou OPENROWSET(BULK...), é importante entender como a versão do SQL Server controla 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 do SQL Server. Para obter 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 (SQL Server)
Manter valores de identidade ao importar dados em massa (SQL Server)
Manter valores nulos ou use os valores padrão durante a importação em massa (SQL Server)
Usar um arquivo de formato para importação em massa de dados (SQL Server)
Usar o formato de caractere para importar ou exportar dados (SQL Server)
Usar o formato nativo para importar ou exportar dados (SQL Server)
Usar o formato de caractere Unicode para importar ou exportar dados (SQL Server)
Usar o formato nativo Unicode para importar ou exportar dados (SQL Server)
Usar um arquivo de formato para ignorar uma coluna de tabela (SQL Server)
Função OPENROWSET(BULK...)
O provedor de conjuntos 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 conectando-se a uma fonte de dados remota, como um arquivo de dados, por meio de 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...) dá suporte a dicas de tabela. 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 de instruções INSERT... SELECT * FROM OPENROWSET(BULK...), consulte os tópicos a seguir:
Exemplos de importação e exportação em massa de documentos XML (SQL Server)
Manter valores de identidade ao importar dados em massa (SQL Server)
Manter valores nulos ou use os valores padrão durante a importação em massa (SQL Server)
Usar um arquivo de formato para importação em massa de dados (SQL Server)
Usar o formato de caractere para importar ou exportar dados (SQL Server)
Usar um arquivo de formato para ignorar uma coluna de tabela (SQL Server)
Usar um arquivo de formato para ignorar um campo de dados (SQL Server)
Considerações sobre segurança
Se um usuário usar um logon do SQL Server, o perfil de segurança da conta de processo do SQL Server será usado. Um logon que usa a autenticação do SQL Server não pode ser autenticado fora do Mecanismo de Banco de Dados. Assim, quando um comando BULK INSERT é iniciado por um logon que usa a autenticação do SQL Server, a conexão aos dados é feita por meio do contexto de segurança da conta de processo do SQL Server (a conta usada pelo serviço de Mecanismo de Banco de Dados do SQL Server). Para ler a fonte de dados com êxito, você deve dar à conta usada pelo Mecanismo de Banco de Dados do SQL Server acesso ao banco de dados. Em contrapartida, se um usuário do SQL Server fizer logon por meio da Autenticação do Windows, ele poderá acessar, no modo somente leitura, aqueles arquivos que podem ser acessados pela conta do usuário, a despeito do perfil de segurança do processo do 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. Entender como a versão do SQL Server controlam a segurança por representação de usuário é importante para 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.
Importação em massa de um arquivo de dados remoto
Para usar BULK INSERT ou INSERT...SELECT * FROM OPENROWSET(BULK...) para importação de 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 AdventureWorks de um arquivo de dados denominado newdata.txt. Esse arquivo de dados reside na pasta compartilhada \dailyorders no diretório de compartilhamento de rede salesforce no sistema computer2.
BULK INSERT AdventureWorks2012.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
Referência
Cláusula SELECT (Transact-SQL)