Usuário com melhor resposta
Ajuda :: bcp e xp_cmdshell

Pergunta
-
Galera,
to tentando executar o seguinte comando e está medando o erro abaixo:
'substr' is not a recognized built-in function name.
Ressalto que quando executo o linkserver por fora do shell funciona normalmente.
exec xp_cmdshell 'bcp "SELECT * FROM OPENQUERY(ORCLPRD, 'select distinct AV.nat_sin_rd from FMSCMAPP.sgf_t_rastreamento_sinistros RS, FMSCMAPP.sgf_t_wf_hist_avisosinistro AV where RS.sinistro = AV.num_sin and substr(RS.dt_entrada_designado,4,2) || substr(RS.dt_entrada_designado,1,2) || substr(RS.dt_entrada_designado,7,4) = TO_CHAR(SYSDATE-1,''MMDDYYYY'')')" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA_20120508.txt"'
Daniel
Respostas
-
Daniel,
Me desculpe, falha minha, como vi no primeiro posto o linked server com o Oracle pensei uma coisa e postei outra.
Segue:
SELECT * FROM Banco.Esquema.Tablea
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta dralves segunda-feira, 14 de maio de 2012 15:17
Todas as Respostas
-
-
-
Boa tarde Daniel,
Neste caso o problema esta nas aspas simples, a 1º aspas que é aberta antes do comando BCP fecha antes do comando select, sendo assim o Select que era para ser executado no Oracle esta sendo executado no Sql Server ( dai o erro do comando SUBSTR que não existe no Sql Server mas sim no Oracle).
Nunca vi este cenário de BCP com Linked Server( nem sei se funciona ), mas tentei modificar sua query para ver se funciona ( colocando uma aspas a mais ), só não deu para eu testar aqui.
Apenas uma dica, no seu lugar eu tentaria fazer uma das 2 alternativas abaixo:
1º - Se possivel, fazer a extração das informações do Oracle para o arquivo diretamente pelo Oracle.
Ou se a solução tiver que ser no Sql Server: criar uma tabela no Sql Server como intermediaria, buscar as informações do Oracle pelo linked server e jogar nesta tabela e depois utilizar o BCP buscando os dados da tabela.
exec xp_cmdshell 'bcp "SELECT * FROM OPENQUERY(ORCLPRD, ''select distinct AV.nat_sin_rd from FMSCMAPP.sgf_t_rastreamento_sinistros RS , FMSCMAPP.sgf_t_wf_hist_avisosinistro AV where RS.sinistro = AV.num_sin and substr(RS.dt_entrada_designado,4,2) || substr(RS.dt_entrada_designado,1,2) || substr(RS.dt_entrada_designado,7,4) = TO_CHAR(SYSDATE-1,''''MMDDYYYY'')'')" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA_20120508.txt"'
Adriano Nascimento
-
-
Adriano,
executei a segunda opção como vc orientou e não tive mais o erro, porém não consegui carregar o arquivo. Ao executar o procedimento somente me retorna o output abaixo:
User name not provided, either use -U to provide the user name or use -T for Trusted Connection
usage: bcp {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors] [-f formatfile] [-e errfile]
[-F firstrow] [-L lastrow] [-b batchsize]
[-n native type] [-c character type] [-w wide character type]
[-N keep non-text native] [-V file format version] [-q quoted identifier]
[-C code page specifier] [-t field terminator] [-r row terminator]
[-i inputfile] [-o outfile] [-a packetsize]
[-S server name] [-U username] [-P password]
[-T trusted connection] [-v version] [-R regional enable]
[-k keep null values] [-E keep identity values]
[-h "load hints"] [-x generate xml format file]
NULLO comando ficou desta maneira:
exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA.txt"'
Aguardo retorno.Daniel
-
-
drAlves, boa tarde,
Faltou alguns parâmetros, tente desta forma:
exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA.txt" -T -c -C"ACP" -t";"'
Att,Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial. -
Rafael,
coloquei dessa forma.
exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\teste.txt" -S ONIX -T -c -t";"'
porém deu esse erro. Ressalto que rodando o Select separadamente funciona.
SQLState = 42S02, NativeError = 208
Error = [Microsoft][SQL Native Client][SQL Server]Invalid object name 'PRODUTIVIDADE_DIA'.
SQLState = 42000, NativeError = 8180
Error = [Microsoft][SQL Native Client][SQL Server]Statement(s) could not be prepared.
NULLDaniel
-
drAlves,
Me desculpe, tente colocar o nome do objeto totalmente qualificado (Ex: SELECT * FROM Instancia.Esquema.Tablea)
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial. -
Rafael,
ficou dessa maneira mais ainda continua com a mesma mensagem de erro.
Olha como ficou:
exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM DBO.PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\teste.txt" -S ONIX -T -c -t";"'
Olha o erro
SQLState = 42S02, NativeError = 208
Error = [Microsoft][SQL Native Client][SQL Server]Invalid object name 'DBO.PRODUTIVIDADE_DIA'.
SQLState = 42000, NativeError = 8180
Error = [Microsoft][SQL Native Client][SQL Server]Statement(s) could not be prepared.
NULLDaniel
-
Daniel,
Antes do esquema coloque o nome da instancia conforme o exemplo que postei anteriormente.
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial. -
-
Se for uma instancia padrão é o mesmo nome do servidor, se não é o NomeServidor/NomeInstancia. Mas no seu caso é dessa forma sim, ao menos pelo parâmetro que você passou no bcp.
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial. -
-
Daniel,
Então ONIX não é o nome da sua instância, pois o select deveria funcionar. No Microsoft SQL Server Management Studio, no Object Explorer tem como verificar o nome da instância. Vai ter o nome da instância e logo após entre parênteses, a versão e o usuário).
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Editado Rafael Godoi Sabadin sexta-feira, 11 de maio de 2012 19:07
-
-
Daniel,
Me desculpe, falha minha, como vi no primeiro posto o linked server com o Oracle pensei uma coisa e postei outra.
Segue:
SELECT * FROM Banco.Esquema.Tablea
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.- Marcado como Resposta dralves segunda-feira, 14 de maio de 2012 15:17
-
Rafael,
funcionou muito obrigado pela ajuda. Porém quando tento salvar o arquivo gerado em outra máquina exibe a seguinte mensagem:
error = microsoft sql native client unable to open bcp host data-file
Eu sei que é alguma coisa em relação a permissão, porém qual o usuário que deverá ter permissão? O meu usuário ou o usuário SqlServer?
Desde já agradeço.
Daniel
-
Daniel,
O usuário do SQL Server que deverá ter permissão.
Att,
Rafael Godoi Sabadin
http://www.linkedin.com/in/rafaelgodoisabadin
Classifique as respostas. O seu feedback é essencial.