我一直在试图使用存储过程来计算服务的总成本,以在单独的存储过程中设置“成本”参数的值。使用存储过程设置参数值
计算存储过程按预期工作(当我运行它时返回正确的值),并且第二个存储过程正在执行而没有错误,但第一个存储过程的值没有被结转(返回0在我的决赛桌上)。
这里有两个存储过程:
ALTER PROCEDURE [dbo].[calculateCost]
(@VIN INT,
@BookingDate DATE, @BookingTime TIME(7),
@ReturnDate DATE, @ReturnTime TIME(7)
)
AS
BEGIN
SET NOCOUNT ON;
SELECT
(CASE WHEN (DATEDIFF(hour, @BookingTime, @ReturnTime) * Vehicle.HourlyRate) <= 0
THEN 0
ELSE (DATEDIFF(hour, @BookingTime, @ReturnTime) * Vehicle.HourlyRate)
END) + DATEDIFF(day, @BookingDate, @ReturnDate) * Vehicle.DailyRate AS Cost
FROM
dbo.Vehicle
WHERE
VIN = @VIN
END
第二个存储过程:
ALTER PROCEDURE [dbo].[updateBooking]
(@BookingID INT, @CustomerID INT, @VIN INT,
@BookingDate DATE, @BookingTime TIME(7),
@ReturnDate DATE, @ReturnTime TIME(7),
@OdoReadingInbound INT,
@Discount FLOAT,
@ObservationsIn NVARCHAR(50),
@EmpID INT
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Cost money
EXEC @Cost = dbo.calculateCost @BookingID, @BookingDate, @BookingTime, @ReturnDate, @ReturnTime
UPDATE dbo.Booking
SET CustomerID = @CustomerID,
VIN = @VIN,
BookingDate = @BookingDate,
BookingTime = @BookingTime,
ReturnDate = @ReturnDate,
ReturnTime = @ReturnTime,
OdoReadingInbound = @OdoReadingInbound,
Discount = @Discount,
ObservationsIn = @ObservationsIn,
EmpID = @EmpID,
Cost = @Cost
WHERE BookingID = @BookingID
END
我绝不用SQL所以任何帮助,将不胜感激感谢过于经历,我已经试图寻找这个问题我自己在过去的30分钟左右无济于事:)
编辑:现在我试图使用OUT PUT变量,但是我仍然从第二个SP中获得0作为我的最终值。有人能指出我在这里做错了吗?
ALTER PROCEDURE [dbo].[calculateCost]
-- Add the parameters for the stored procedure here
(@VIN int
, @BookingDate date
, @BookingTime time(7)
, @ReturnDate date
, @ReturnTime time(7)
, @Cost money OUTPUT
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT (CASE WHEN
(DATEDIFF(hour, @BookingTime, @ReturnTime)
* Vehicle.HourlyRate) <= 0 THEN 0 ELSE
(DATEDIFF(hour, @BookingTime, @ReturnTime)
* Vehicle.HourlyRate) END)
+ DATEDIFF(day, @BookingDate, @ReturnDate)
* Vehicle.DailyRate AS Cost
FROM dbo.Vehicle
WHERE VIN = @VIN
RETURN
END
。
ALTER PROCEDURE [dbo].[updateBooking]
-- Add the parameters for the stored procedure here
(@BookingID int
, @CustomerID int
, @VIN int
, @BookingDate date
, @BookingTime time(7)
, @ReturnDate date
, @ReturnTime time(7)
, @OdoReadingInbound int
, @Discount float
, @ObservationsIn nvarchar(50)
, @EmpID int
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @Cost money
EXEC @Cost = dbo.calculateCost @BookingID, @BookingDate, @BookingTime, @ReturnDate, @ReturnTime, @Cost OUTPUT
UPDATE dbo.Booking
SET CustomerID = @CustomerID,
VIN = @VIN,
BookingDate = @BookingDate,
BookingTime = @BookingTime,
ReturnDate = @ReturnDate,
ReturnTime = @ReturnTime,
OdoReadingInbound = @OdoReadingInbound,
Discount = @Discount,
ObservationsIn = @ObservationsIn,
EmpID = @EmpID,
Cost = @Cost
WHERE BookingID = @BookingID
END
看到这个问题https://stackoverflow.com/questions/1605242/how-to-set-the-result-of-exec-存储过程到变量 –
您需要在第一个存储过程中使用返回值,以便它返回一个标量值,该值可以分配给变量 –
,您可以使用INSERT INTO table EXEC ...; OR RETURN; OR OUTPUT参数 –