+2 votos
34 visitas
CREATE FUNCTION [DBO].[QTD_PEDIDOSATENDER](@EMPRESA INT,@FILIAL INT,@PROD INT) RETURNS FLOAT AS BEGIN DECLARE @QTD AS FLOAT SELECT @QTD = ISNULL(ROUND(SUM(ITEMOV.QUANTIDADE - ISNULL(ITEMOV.QUANTIDADEATENDIDA, 0) - ISNULL(ITEMOV.QUANTIDADEFATURADA, 0)))) FROM CM_ORDENSVENDA OV INNER JOIN CM_ORDEMVENDAITENS ITEMOV ON (ITEMOV.ORDEMVENDA = OV.HANDLE) WHERE OV.EMPRESA = @EMPRESA AND OV.FILIAL = @FILIAL AND ITEMOV.PRODUTO = @PROD AND OV.STATUS IN (2,3) AND ITEMOV.STATUS IN (2,3,4) AND OV.K9_MODALIDADE = 1 RETURN @QTD END

 

Erro:

Msg 189, Level 15, State 1, Procedure QTD_PEDIDOSATENDER, Line 1
The round function requires 2 to 3 arguments.
por (20 pontos) | 34 visitas
Oracle? SQL Server?
O problema o corre no SQL Server

1 Resposta

0 votos

ROUND do SQL Server tem pelo menos 2 argumentos.

Veja a documentação: https://docs.microsoft.com/pt-br/sql/t-sql/functions/round-transact-sql?view=sql-server-ver15

No seu comando acima o ROUND não tem apenas um argumento (O mesmo acontece para o primeiro ISNULL)

Isolando a função citada.

ISNULL(
  ROUND(
    SUM(
      ITEMOV.QUANTIDADE - ISNULL(ITEMOV.QUANTIDADEATENDIDA, 0) - ISNULL(ITEMOV.QUANTIDADEFATURADA, 0)
   )
  )
)

Deveria ser

ISNULL(
  ROUND(
    SUM(
      ITEMOV.QUANTIDADE - ISNULL(ITEMOV.QUANTIDADEATENDIDA, 0) - ISNULL(ITEMOV.QUANTIDADEFATURADA, 0)
   ), 0 -- Arredondando duas casas
  ), 0 -- ISNULL assumindo zero
)

 

por (929 pontos)

Perguntas relacionadas

+2 votos
1 resposta
+3 votos
1 resposta
+4 votos
1 resposta
Melhores Jul 2020
  1. nira

    7 Pontos

200 pontos
Melhores 2020 Jun 29 - Jul 05
  1. nira

    7 Pontos

436 perguntas
484 respostas
350 comentários
470 usuários