【发布时间】:2021-05-23 09:26:16
【问题描述】:
我创建了一个存储过程。但是当我执行它时,尽管我将'@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。非常感谢您的帮助。
【问题讨论】:
-
查看“新”
DROP IF EXISTS和/或CREATE OR ALTER PROCEDURE语句,它们让 SQL Server 的生活变得更轻松! -
当您在 proc 外部使用相同的参数值而不进行变量分配运行查询时,您会看到什么结果?也许
SUM(CTD.Quantity)是NULL。 -
@DanGuzman 查询返回准确结果。但是当我运行该过程时,它返回 null。
-
@marc_s 谢谢。距离我最近一次使用 SQL Server 已经有一段时间了。
-
顺便说一下,您不应该使用
''来分隔列名。用[]分隔它们如果需要在这里你根本不需要
标签: sql-server stored-procedures