Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andreia_sp

Bulk INSERT

Recommended Posts

Bom dia pessoal,

 

Tenho a seguinte duvida: uso uma procedure que insere os dados de um arquivo para uma tabela temporária através do Bulk Insert. Ok, mas o arquivo pode variar de 2 ou 3 colunas. Não gostaria de ter que criar 2 procedures ou fazer uma gambiarra danada pra ficar uma só.

Já fiz uns testes aqui e dá erro mesmo se eu mando um arquivo com 2 colunas se na tabela temporária tem 3. Alguém sabe como fazer isso?

 

Obrigada desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andreia,

 

nesta tabela temporaria você jah consegue identificar qtas colunas ele tem? Se sim, faz um IF, ou você salva em um tabela fisica e usa a syscolumns para pegar qtas colunas tem no arquivo.

 

Uma ideia eh claro.

 

Qual a sua versao do SQL?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites
versão é 2008, mas creio que nao há como verificar as colunas do arquivo no bulk insert pq é um comando sql que executa direto

Compartilhar este post


Link para o post
Compartilhar em outros sites

não será possivel usar

 

O SQL Server bloqueou o acesso a INSTRUÇÃO 'OpenRowset/OpenDatasource' do componente 'Ad Hoc Distributed Queries' porque esse componente está desativado como parte da configuração de segurança deste servidor. Um administrador de sistema pode habilitar o uso de 'Ad Hoc Distributed Queries' usando sp_configure. Para obter mais informações sobre como habilitar 'Ad Hoc Distributed Queries', consulte "Configuração da área da superfície" nos Manuais Online do SQL Server.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para habilitar:

Surface Area Configuration (SAC).

Escolha a opção Surface Area Configuration for Features

 

Aparecerá a opção Ad Hoc Remote Queries logo de cara.

 

Habilitando a checkbox Enable OPENROWSET and OPENDATASOURCE support, fará com que esta mensagem de erro não apareça e você consiga usar as funções adequadamente.

 

ouuuuuuuuuuuuuuuuuu

 

sp_configure 'show advanced options', 1;

RECONFIGURE;

sp_configure 'Ad Hoc Distributed Queries', 1;

RECONFIGURE;
GO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajr nao encontrei a opção SAC, esqueci de dizer que é Express 2008

 

rodando o codigo que indicaste, gera as mensagens

 

A opção de configuração 'show advanced options' foi alterada de 1 para 1. Execute a instrução RECONFIGURE para instalar.

Msg 5807, Level 16, State 1, Line 3

Intervalos de recuperação acima de 60 minutos não são recomendados. Use a instrução RECONFIGURE WITH OVERRIDE para forçar essa configuração.

 

A opção de configuração 'Ad Hoc Distributed Queries' foi alterada de 0 para 1. Execute a instrução RECONFIGURE para instalar.

Msg 5807, Level 16, State 1, Line 3

Intervalos de recuperação acima de 60 minutos não são recomendados. Use a instrução RECONFIGURE WITH OVERRIDE para forçar essa configuração.

 

obrigada por sua atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta rodar linha a linha para ver se da o msm erro... nunca vi este erro O_o msm no express... eh o R2 express?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tinha rodado linha a linha e apresentou aquilo, mas eu fiz com with override e nao deu erro MMMMMAASSS rsss agora apresenta outro erro

 

comando

SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Text Driver (*.xls)};DefaultDir=caminho_server\;', 'SELECT * from arquivo.xls');

erro

O provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)" retornou a mensagem "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".

Msg 7303, Level 16, State 1, Line 1

Não é possível inicializar um objeto de fonte de dados do provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)".

 

nao está faltando instalar nada nao? só aqueles comandos já resolvem?!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tinha rodado linha a linha e apresentou aquilo, mas eu fiz com with override e nao deu erro MMMMMAASSS rsss agora apresenta outro erro

 

comando

SELECT * FROM OPENROWSET('MSDASQL', 'Driver={Microsoft Text Driver (*.xls)};DefaultDir=caminho_server\;', 'SELECT * from arquivo.xls');

erro

O provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)" retornou a mensagem "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".

Msg 7303, Level 16, State 1, Line 1

Não é possível inicializar um objeto de fonte de dados do provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)".

 

nao está faltando instalar nada nao? só aqueles comandos já resolvem?!!

 

Por um acaso a maquina que você esta testando nao tem Excel tem?? Existe sim um Driver para o pacote office, mas nao me lembro o nome dele. Vou ver se acho e posto pra ti.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsrsrsrsrs instalar ta instalado mas continua dando erro

 

O provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)" retornou a mensagem "[Microsoft][ODBC Excel Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.".

O provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)" retornou a mensagem "[Microsoft][ODBC Excel Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x494 Thread 0x554 DBC 0x47504fe4 Excel'.".

O provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)" retornou a mensagem "[Microsoft][ODBC Excel Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x494 Thread 0x554 DBC 0x47504fe4 Excel'.".

Msg 7303, Level 16, State 1, Line 1

Não é possível inicializar um objeto de fonte de dados do provedor do OLE DB "MSDASQL" para o servidor vinculado "(null)".

 

executando

 

SELECT *
FROM OPENROWSET('MSDASQL',
    'Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\arquivo.xls',
    'SELECT * FROM [sheet$]')

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso eh erro de permissao no arquivo.. ele tem senha? você tem acesso a ele? esta somente leitura???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao é permissão nao, rachando a cuca procurando descobri isso:

 

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1

e bingo!

 

brigadão A.Jr, voce foi um amor e nao teria conseguido sem sua ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao é permissão nao, rachando a cuca procurando descobri isso:

 

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1

e bingo!

 

brigadão A.Jr, voce foi um amor e nao teria conseguido sem sua ajuda

 

Isso seria minha segunda opção :P

 

Estamos ai pelo fórum (se nao me banirem heheheh)

 

Abçs e boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um adendo, quando jogo os dados em uma tabela (temporária ou não) está ficando tudo zuado, tipo “4.89143e+009” mas quando eu rodo a instrução sem inserir em tabela fica certo. Aparentemente é por causa do tipo de dados no Excel (general) mas como resolver isso?

Já tentei alterar o collate, o dateformat,...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.