Usuário com melhor resposta
Erro ao criar JOB

Pergunta
-
Boa tarde,
Estou criando o seguinte JOB. pra ele disparar um email com o resultado do select no corpo do email
select @BODY_MSG =
NFNum,NFBaseCalcIss,NFBaseCalcIrrf,NFDataEmis from nota_fiscal where NFBaseCalcIss <> NFBaseCalcIrrf and CtrlDFSerie = 'RPS'BEGIN
DECLARE @BODY_MSG VARCHAR(8000)
EXEC msdb.dbo.sp_send_dbmail @recipients = 'renata@teste.com.br',
@subject = 'Nota Fiscal',
@BODY = @BODY_MSG
@body_format = 'HTML'
endporem quando eu finalizo a criação do JOB me apresenta o seguinte erro:
Não é possivel converer um objeto do tipo 'Microsoft.SqlServer.Management.Smo.SimpleObjectKey' no
tipo 'Microsoft.SqlServer.Management.Smo.SimpleObjectKey'. (Microsoft.SqlServer.Smo)
Respostas
-
Renata,
O erro que você está tendo agora é sim problema de sintaxe.
Você não pode usar o mesmo comando SELECT para atribuir valores a variáveis e ao mesmo tempo ler valores.
Segue trecho do seu código com problema:select @BODY_MSG = NFNum,NFBaseCalcIss,NFBaseCalcIrrf,NFDataEmis from nota_fiscal where NFBaseCalcIss <> NFBaseCalcIrrf and CtrlDFSerie = 'RPS' and EmpCod = '1' and NFDataEmis = getdate ()
Note que você atribui @BODY_MSG = NFNum, e depois realiza a leitura dos demais campos. O comando SELECT não permite este tipo de operação. Ou você atribui várias variáveis, ou lê vários campos, mas não pode fazer os dois tipos de operação no mesmo SELECT.
Talvez a sua ideia tenha sido concatenar todos os campos deste select na variável @BODY_MSG. Neste caso, você deve converter tudo para VARCHAR (seja com CONVERT ou com CAST) e concatenar as expressões utilizando o operador +.
Exemplo:
select @BODY_MSG = CAST(NFNum AS VARCHAR) + ', ' + CAST(NFBaseCalcIss AS VARCHAR) + ', ' + CAST(NFBaseCalcIrrf AS VARCHAR) + ', ' + CAST(NFDataEmis AS VARCHAR) from nota_fiscal where NFBaseCalcIss <> NFBaseCalcIrrf and CtrlDFSerie = 'RPS' and EmpCod = '1' and NFDataEmis = getdate ()
[]'s
MCP | MCTS SQL Server 2008 Database Developer
- Editado Filipe M. Oliveira quarta-feira, 16 de maio de 2012 19:15
- Marcado como Resposta Renata Cardoso quinta-feira, 17 de maio de 2012 13:44
Todas as Respostas
-
Renata,
Você poderia descrever como esta realizando a criação deste Job?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
na vdd este problema eu acabei resolvendo era permissão no banco, porem agora estou com outro erro abro novo post?
MEU SELECT
DECLARE @BODY_MSG VARCHAR(8000)
select @BODY_MSG =
NFNum,NFBaseCalcIss,NFBaseCalcIrrf,NFDataEmis from nota_fiscal where NFBaseCalcIss <> NFBaseCalcIrrf and CtrlDFSerie = 'RPS' and EmpCod = '1'
and NFDataEmis = getdate ()
EXEC msdb.dbo.sp_send_dbmail @recipients = 'renata.cardoso@planus.com.br',
@subject = 'Nota Fiscal',
@BODY = @BODY_MSGQUANDO EU EXECUTO O JOB DA UM ERRO NO HISTORICO.
Message
Executed as user: NT AUTHORITY\SYSTEM. A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations. [SQLSTATE 42000] (Error 141). The step failed.NAO SEI SE É PROBLEMA NA SINTAXE DA QUERY.
-
Renata,
O erro que você está tendo agora é sim problema de sintaxe.
Você não pode usar o mesmo comando SELECT para atribuir valores a variáveis e ao mesmo tempo ler valores.
Segue trecho do seu código com problema:select @BODY_MSG = NFNum,NFBaseCalcIss,NFBaseCalcIrrf,NFDataEmis from nota_fiscal where NFBaseCalcIss <> NFBaseCalcIrrf and CtrlDFSerie = 'RPS' and EmpCod = '1' and NFDataEmis = getdate ()
Note que você atribui @BODY_MSG = NFNum, e depois realiza a leitura dos demais campos. O comando SELECT não permite este tipo de operação. Ou você atribui várias variáveis, ou lê vários campos, mas não pode fazer os dois tipos de operação no mesmo SELECT.
Talvez a sua ideia tenha sido concatenar todos os campos deste select na variável @BODY_MSG. Neste caso, você deve converter tudo para VARCHAR (seja com CONVERT ou com CAST) e concatenar as expressões utilizando o operador +.
Exemplo:
select @BODY_MSG = CAST(NFNum AS VARCHAR) + ', ' + CAST(NFBaseCalcIss AS VARCHAR) + ', ' + CAST(NFBaseCalcIrrf AS VARCHAR) + ', ' + CAST(NFDataEmis AS VARCHAR) from nota_fiscal where NFBaseCalcIss <> NFBaseCalcIrrf and CtrlDFSerie = 'RPS' and EmpCod = '1' and NFDataEmis = getdate ()
[]'s
MCP | MCTS SQL Server 2008 Database Developer
- Editado Filipe M. Oliveira quarta-feira, 16 de maio de 2012 19:15
- Marcado como Resposta Renata Cardoso quinta-feira, 17 de maio de 2012 13:44