Sql server 尽管在执行时声明了输出参数,存储过程仍返回NULL
我已经创建了一个存储过程。但当我执行它时,总是返回“null”值,尽管我声明了“@total”作为输出参数 这是我的存储过程: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
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