gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:47:23 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