none
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'
            end

    porem 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)

    quarta-feira, 16 de maio de 2012 14:55

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

    quarta-feira, 16 de maio de 2012 19:12

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]

    quarta-feira, 16 de maio de 2012 16:53
  • 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_MSG

    QUANDO 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.

    quarta-feira, 16 de maio de 2012 17:42
  • 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

    quarta-feira, 16 de maio de 2012 19:12