1
resposta

[Dúvida] RESULTADOS DUVIDOSOS

No SSMS e SQLSERVER a estrutura foi diferente

CREATE TABLE Faturamentodiario(
    Dia Date,
    FaturamentoTotal Decimal(10,2)
)
---- **** chatgpt **** ----
CREATE OR ALTER TRIGGER CalculaFaturamentoDiario
ON ItensPedidos
AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;

    ;WITH Faturamento AS (
        SELECT
            CAST(p.DataHoraPedido AS DATE) AS Dia,
            SUM(i.PrecoUnitario) AS Total
        FROM INSERTED i
        JOIN Pedidos p 
            ON p.ID = i.IDPedido
        GROUP BY CAST(p.DataHoraPedido AS DATE)
    )
    MERGE FaturamentoDiario AS fd
    USING Faturamento AS f
        ON fd.Dia = f.Dia
    WHEN MATCHED THEN
        UPDATE 
            SET fd.FaturamentoTotal = fd.FaturamentoTotal + f.Total
    WHEN NOT MATCHED THEN
        INSERT (Dia, FaturamentoTotal)
        VALUES (f.Dia, f.Total);
END;
GO

INSERT INTO Pedidos(ID, IDCliente, DataHoraPedido, Status)
VALUES (451, 27, '2023-10-07 14:30:00', 'Em Andamento');


INSERT INTO ItensPedidos(IDPedido, IDProduto, Quantidade, PrecoUnitario)
VALUES 
    (451, 14, 1, 6.0),
    (451, 13, 1, 7.0);

Nenhum retorno para

SELECT * FROM Faturamentodiario
WHERE DIA = '2023-10-07

Para o comando

SELECT * FROM Faturamentodiario
WHERE DIA = '2023-07-10'`

Dia: 2023-07-10 | FaturamentoTotal: 117.00

Contudo, com o comando

SELECT ip.precounitario, ip.idpedido, CAST(p.DataHoraPedido as Date) FROM ItensPedidos ip
join pedidos p
    on ip.idpedido = p.id
WHERE CAST(p.DataHoraPedido as Date) = '2023-07-10'

resultado do comando

SELECT sum(ip.precounitario), CAST(p.DataHoraPedido as Date) FROM ItensPedidos ip
join pedidos p
    on ip.idpedido = p.id
GROUP BY CAST(p.DataHoraPedido as Date)
HAVING CAST(p.DataHoraPedido as Date) = '2023-07-10'

RESULTADO DO COMANDO

Caso minha linha de raciocínio esteja certa, o que posso fazer para verificar onde esta a inconsistência?

1 resposta

Ei, Robson! Tudo bem?

Sim, seu raciocínio está na linha certa. O problema pode não estar no SELECT, e sim no momento em que o trigger é executado e na data usada nos testes.

Analise os pontos a seguir:

  1. As datas no INSERT estão diferentes, você consultou '2023-07-10', o que já possui dados consolidados . Mas em outro INSERT o pedido com a data '2023-07-10' foi feito, o que pode trazer resultados diferentes.

  2. O trigger está configurada para atualizar ou inserir dados na tabela FaturamentoDiario após um INSERT na tabela ItensPedidos. Ele não recalcula dados antigos, ou seja, se tem dados antes do dia '2023-07-10' eles não entrarão. Revise se o trigger está sendo acionada corretamente após cada inserção.

  3. No SQL Server, o formato da data é 'YYYY-MM-DD', revise se está certo para que a data seja interpretada corretamente.

  4. Valide se o trigger está rodaando com o comando abaixo após o INSERT:

SELECT * FROM FaturamentoDiario
ORDER BY Dia DESC;

Se não aparecer 2023-10-07, o trigger não executou ou não encontrou dados.

Espero que após essa verificação dê certo. Qualquer dúvida, compartilhe no fórum.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!