尽管在执行时声明了 OUTPUT 参数,但存储过程 returns NULL

Stored procedure returns NULL despite declaring OUTPUT parameter when executing

我创建了一个存储过程。但是当我执行它时,尽管我将“@total”声明为输出参数,但总是返回 'null' 值。

这是我的存储过程:

IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[GetTotalInsectsInTrap]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[GetTotalInsectsInTrap]

GO

CREATE PROCEDURE [dbo].[GetTotalInsectsInTrap] 
    @Date DATE, @Kind NVARCHAR, @TotalQuantity INT OUTPUT AS
BEGIN
    SELECT 
        @TotalQuantity = SUM(CTD.Quantity)
    FROM 
        CheckTrapDetails AS CTD
    JOIN 
        CheckTraps AS CT 
        ON CT.Id = CTD.CheckTrapId
    JOIN 
        Insects AS I 
        ON I.Id = CTD.InsectId
    WHERE 
        CT.Date = @Date AND 
        I.Kind = @Kind
    GROUP BY 
        I.Kind, 
        CT.Date
END

这是SSMS生成的执行代码:

USE [OP_Insect]
GO

DECLARE @return_value int,
        @TotalQuantity int

EXEC    @return_value = [dbo].[GetTotalInsectsInTrap]
        @Date = '2021-05-04',
        @Kind = N'Rầy nâu',
        @TotalQuantity = @TotalQuantity OUTPUT

SELECT  @TotalQuantity as N'@TotalQuantity'

SELECT  'Return Value' = @return_value

GO

这是结果: result

我正在使用 SQL Server 2017 和 SSMS 18。非常感谢您的帮助。

我认为您需要在以下示例中为@Kind 指定nvarchar 字段的长度,例如nvarchar(50)。 .

CREATE PROCEDURE [dbo].[GetTotalInsectsInTrap] 
    @Date DATE, @Kind NVARCHAR, @TotalQuantity INT OUTPUT AS

没有数字的 nvarchar 通常默认为 nvarchar(1) - 我假设你的昆虫不被

调用