【问题标题】:Stored procedure returns NULL despite declaring OUTPUT parameter when executing尽管在执行时声明了 OUTPUT 参数,存储过程仍返回 NULL
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。这正是我的问题的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2016-06-11
  • 1970-01-01
相关资源
最近更新 更多