我需要创建一个将通过Web方法调用的存储过程。基本思想是proc需要
(IF EXISTS ...)
到目前为止我已经
了CREATE PROC Sponsors.GetLightBoxAds (@SponsorID varchar(30))
AS
BEGIN
IF EXISTS (SELECT TOP 1
AD.ADID
FROM Sponsors.AD
WHERE AD.Active = 1 and AD.Sponsor = @SponsorID)
--takes the ID value of first active AD record it finds, at random, for that sponsor
BEGIN
SELECT TOP 1
AD.ADID --I want to use this value as my parameter for the second proc.
FROM Sponsors.AD
WHERE AD.Active = 1
ORDER BY newid()
--Ideally I'd like to call a separate proc here because there's more to be done
--but for testing I'm trying to run the update here
UPDATE Sponsor.AD
SET AD.CurrentClickCount = AD.CurrentClickCount + 1
WHERE ADID = @ADID -- use the result of the first select here.
END
END
GO
有没有办法让proc都返回我想要的ID,并使用该ID作为调用参数调用另一个proc?
我可以将它拆分为单独的调用,并让web后端处理参数调用,但这会增加延迟,如果这个延迟变大,可能会出现并发问题,所以我更愿意让服务器同时运行两个调用。
答案 0 :(得分:1)
如上所述,您首先需要声明@ADID - 类似于:
DECLARE @ADID INT;
完成后,选择您想要的ID:
SELECT TOP 1 @ADID = AD.ADID
FROM Sponsors.AD
WHERE AD.Active = 1 and AD.Sponsor = @SponsorID
然后你可以有条件地开始你的过程:
IF ISNULL(@ADID,-1) != -1
BEGIN
EXEC YourStoredProc @ADID
END
要在结尾处返回ID,请执行以下操作:
SELECT @ADID AS ADID;
您可以通过使用以下过程声明输出变量来使用输出参数方法:
CREATE PROC Sponsors.GetLightBoxAds (
@SponsorID varchar(30),
@ADIDOut INT OUTPUT
)
AS --...
然后做:
SELECT @ADIDOut = @ADID;