Ich habe versucht, eine gespeicherte Prozedur zu verwenden, die die Gesamtkosten eines Dienstes berechnet, um den Wert eines Parameters "cost" in einer separaten gespeicherten Prozedur festzulegen.Festlegen eines Parameterwerts mithilfe einer gespeicherten Prozedur
Die berechnete gespeicherte Prozedur funktioniert wie vorgesehen (gibt den richtigen Wert zurück, wenn ich sie ausführe) und die zweite gespeicherte Prozedur wird ohne Fehler ausgeführt, der Wert aus der ersten gespeicherten Prozedur wird jedoch nicht übernommen (0 wird zurückgegeben) in meinem Finaltisch).
Hier sind die beiden gespeicherten Prozeduren:
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
Zweite gespeicherte Prozedur:
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
ich keineswegs bin übermäßig mit SQL so jede Hilfe dankbar dank erfahren würde, ich habe habe versucht, dieses Problem selbst für die letzten 30 Minuten oder so ohne Erfolg zu suchen :)
EDIT: Ich versuche jetzt, ein OUT zu verwenden PUT Variable, aber ich bekomme immer noch 0 als meinen endgültigen Wert vom zweiten SP. Könnte jemand bitte darauf hinweisen, was ich hier falsch mache?
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
diese Frage Siehe https://stackoverflow.com/questions/1605242/how-to-set-the-result-of-exec- stored-procedure-to-a-variable –
Sie müssen eine Rückgabe in der ersten gespeicherten Prozedur verwenden, so dass es einen skalaren Wert zurückgibt, der einer Variablen zugewiesen werden kann –
Sie können INSERT INTO Tabelle EXEC verwenden ...; ODER RÜCKKEHR; ODER OUTPUT Parameter –