Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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á
versão é 2008, mas creio que nao há como verificar as colunas do arquivo no bulk insert pq é um comando sql que executa direto
Tente usar o OPENROWSET para pegar os limitadores do arquivo, com isso você conta os campos..... ;)
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.
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;
GOAjr 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!
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?
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?!!
>
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
esqueci deste detalhe! nao tem o office instalado =/ é possivel sem o office instalado fazer isso ?
por acaso seria isso? http://sqlserverday.com.br/alopes/?p=49
Isso!!!!! Este mesmo....
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$]')
isso eh erro de permissao no arquivo.. ele tem senha? você tem acesso a ele? esta somente leitura???
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
>
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
aproveitando o topico, é possivel fazer um create sheet (create table) com o OPENROWSET ?
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,...
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