Sql server 尽管在执行时声明了输出参数,存储过程仍返回NULL

Sql server 尽管在执行时声明了输出参数,存储过程仍返回NULL,sql-server,stored-procedures,Sql Server,Stored Procedures,我已经创建了一个存储过程。但当我执行它时,总是返回“null”值,尽管我声明了“@total”作为输出参数 这是我的存储过程: IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[GetTotalInsectsInTrap]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) DROP PROCEDURE [dbo].[GetTotalInsectsInTrap] GO C

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

这是我的存储过程:

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
结果是:


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

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


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

调用,我认为你需要在下面为@Kind指定nvarchar字段的长度,例如nvarchar(50)


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

调用查看“new”和/或语句,这些语句使SQL Server中的生活更加轻松!在proc外部使用相同的参数值运行查询时,如果没有变量赋值,您会看到什么结果?可能
SUM(CTD.Quantity)
为空。@DanGuzman查询返回准确的结果。但当我运行这个过程时,它返回null。@marc_谢谢。我最近一次使用SQL Server已经有一段时间了。顺便说一下,您不应该使用
'
来分隔列名。如果需要,在这里用
[]
分隔它们,您根本不需要查看“新”和/或语句,它们使SQL Server中的工作变得更加轻松!在proc外部使用相同的参数值运行查询时,如果没有变量赋值,您会看到什么结果?可能
SUM(CTD.Quantity)
为空。@DanGuzman查询返回准确的结果。但当我运行这个过程时,它返回null。@marc_谢谢。我最近一次使用SQL Server已经有一段时间了。顺便说一下,您不应该使用
'
来分隔列名。在必要的地方,用
[]
分隔它们,您根本不需要这样做。谢谢。这正是解决我问题的办法。谢谢。这正是解决我问题的办法。
CREATE PROCEDURE [dbo].[GetTotalInsectsInTrap] 
    @Date DATE, @Kind NVARCHAR, @TotalQuantity INT OUTPUT AS