要容易对我...还是一个新手T-SQL程序员:)T-SQL存储过程传递输入,输出采用
我有打算采用三个输入参数,分析和存储过程发回一个参数(@资格)。如果我只是用硬编码的变量执行T-SQL脚本,我的@@ ROWCOUNT会将@eligible设置为1.当我将它作为存储过程EXECUTE调用时,它不会正确返回@资格。下面是该过程:
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稍后会用到,当我适应这个到表触发器)
谢谢 凯文
你的意思是,如果你对自己的运行选择具有硬编码值,而不是返回至少一个行变量,但如果你调用进程内传递的参数相同的值,结果集是空的? – acfrancis