Мне нужно определить переменную duedate, чтобы проверить, когда клиент должен заплатить, и мне нужно, чтобы вычислить сумму, которая должна быть выплачена.
Я определил переменную @DueDate
, которую я получаю из условий.
Я получаю эту ошибку, хотя я пытался преобразовать ее в дату и время.
Сообщение 241, Уровень 16, Состояние 1, Процедура GetPayments, Строка 14 [Стартовая строка начала 0]
Преобразование не удалось при преобразовании даты и / или времени из строки символов.
Мой код:
USE [Tenant Management]
GO
ALTER PROCEDURE [dbo].[GetPayments]
@DueDate AS DATETIME
AS
BEGIN
SET NOCOUNT ON;
SET @DueDate = 'select CASE rsp.[Frequency]
when ''1'' then CAST(DATEADD(MONTH, 12, rs.Last_Payment) as datetime)
when ''2'' then CAST(DATEADD(MONTH, 6, rs.Last_Payment) as datetime)
when ''3'' then CAST(DATEADD(MONTH, 3, rs.Last_Payment) as datetime)
when ''4'' then CAST(DATEADD(MONTH, 1, rs.Last_Payment) as datetime)
end
from [dbo].[Reservation_Price] rsp
inner join [dbo].[Reservations] rs on rsp.Reservation_ID = rs.ID';
SELECT
prs.[First Name] + ' ' + prs.[Middle Name] + ' ' + prs.[Last Name] AS [Tenant],
c.Name as [Channel Name],
CASE rsp.[Frequency]
WHEN '1' THEN DATEADD(MONTH, 12, rs.Last_Payment)
WHEN '2' THEN DATEADD(MONTH, 6, rs.Last_Payment)
WHEN '3' THEN DATEADD(MONTH, 3, rs.Last_Payment)
WHEN '4' THEN DATEADD(MONTH, 1, rs.Last_Payment)
END AS [Next Payment Due],
rs.[Actual Date in],
@DueDate,
DATEDIFF(MONTH, @DueDate, GETDATE()) * rsp.Price_Month AS [Amount to be paid],
rs.Balance
FROM
[dbo].[Reservation_Price] rsp
INNER JOIN
[dbo].[Reservations] rs ON rsp.Reservation_ID = rs.ID
INNER JOIN
[dbo].[Person] prs ON rs.[Person ID] = prs.ID
INNER JOIN
[dbo].[Channel] c ON rs.[Channel ID] = c.ID
INNER JOIN
[dbo].[Reservation_Frequency] fq ON rsp.Frequency = fq.ID
WHERE
rsp.Date_From < GETDATE()
AND rsp.Date_To > DATEADD(MONTH, 1, rs.Last_Payment)
END