gpt4 book ai didi

sql-server - T-SQL 存储过程传递输入,使用输出

转载 作者:行者123 更新时间:2023-12-02 21:45:46 25 4
gpt4 key购买 nike

对我宽容一些...我还是个新手 T-SQL 程序员:)

我有一个存储过程,旨在获取三个输入参数,对它们进行评估并发回一个参数(@eligible)。如果我只是执行带有硬编码变量的 T-SQL 脚本,我的 @@ROWCOUNT 将 @eligible 设置为 1。当我将其作为存储过程执行调用时,它不会正确返回 @eligible。程序如下:

ALTER PROCEDURE [dbo].[proc_Eligible]
(@control AS nvarchar(10),
@checkno AS nvarchar(10),
@event_type AS nvarchar(7),
@eligible AS bit OUTPUT)
AS

BEGIN
SET @eligible = 0

SELECT @control AS Control, @checkno AS CheckNum

-- Is the check drawn on an eligible bank?
SELECT
H.CONTROL,
H.NAME,
H.RECV_DATE,
H.CHECK_NUM,
H.BANK,
SUM(D.RECV_AMOUNT)
FROM
[ZZZ].[dbo].[MRRECVH] H INNER JOIN
[ZZZ].[dbo].[MRRECVD] D ON H.control = D.CONTROL
WHERE
BANK IN (SELECT
RIMAS_Code
FROM
[Custom].[dbo].[Bank_Account])
AND H.CONTROL = @control
AND H.CHECK_NUM = @checkno
GROUP BY
H.CONTROL,
H.BANK,
H.NAME,
H.CHECK_NUM,
H.RECV_DATE
HAVING
SUM(D.RECV_AMOUNT) > 0

IF @@ROWCOUNT > 0
SELECT @eligible = 1
END

(在倒数第二行,我尝试了“SET @eligible = 1”,但这没有任何区别)。

调用过程:

DECLARE
@eligible AS bit

EXECUTE proc_Eligible
@Control = '3034'
,@Checkno = '5011'
,@event_type = 'update'
,@eligible = @eligible

SELECT @eligible

正如我提到的,如果我隔离存储过程 SELECT 语句并对变量进行硬编码,效果会很好,所以这可能是我的新手在传递数据方面缺乏经验。

(稍后当我将其改编成表触发器时将使用@event_type)

谢谢你,凯文

最佳答案

当您调用存储过程时,似乎还必须指定 OUTPUT 关键字:

EXECUTE proc_Eligible
@Control = '3034'
,@Checkno = '5011'
,@event_type = 'update'
,@eligible = @eligible OUTPUT -- <--- mark parameter as output

关于sql-server - T-SQL 存储过程传递输入,使用输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19528670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com