Ich habe drei Tabellen.Termin Slots funktioniert nicht
Tabelle 1 (Buch)
CREATE TABLE [dbo].[Booking](
[Booking_Serno] [int] IDENTITY(1,1) NOT NULL,
[Dt] [datetime] NULL,
[start] [nvarchar](50) NULL,
[todate] [nvarchar](50) NULL,
[Service_Id] [int] NULL
) ON [PRIMARY]
INSERT [dbo].[Booking] ([Booking_Serno], [Dt], [start], [todate], [Service_Id]) VALUES (1, CAST(0x0000A6DA00000000 AS DateTime), N'9:30 AM', N'10:00 AM', 1)
GO
Tabelle 2 (Service)
CREATE TABLE [dbo].[Service](
[Service_Serno] [int] IDENTITY(1,1) NOT NULL,
[Service_Duration] [int] NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Service] ON
INSERT [dbo].[Service] ([Service_Serno], [Service_Duration]) VALUES (1, 30)
Tabelle 3 (Regeln)
CREATE TABLE [dbo].[Rules](
[Rule_Serno] [int] IDENTITY(1,1) NOT NULL,
[Start_Dt] [varchar](50) NULL,
[End_Dt] [varchar](50) NULL,
[from_dt] [varchar](50) NULL,
[to_dt] [varchar](50) NULL,
[Service_Id] [int] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[Rules] ON
INSERT [dbo].[Rules] ([Rule_Serno], [Start_Dt], [End_Dt], [from_dt], [to_dt], [Service_Id]) VALUES (1, N'2016-07-02', N'2016-07-13', N'07:00', N'17:00', 1)
Ich führe eine gespeicherte Prozedur aus. Es bringt mir das gewünschte Ergebnis, aber dann versuche ich eine Zeit zu buchen, indem ich das Intervall ändere, die Slots werden leer angezeigt, auch wenn ein Slot belegt ist. Ex. Wenn ich einen Slot für 60 Minuten setze und einen Slot von 7: 00-8: 00 buche, wird gebucht (xxx) angezeigt, aber wenn ich das Intervall auf 30 ändere, wird 7: 00-8: 00 verfügbar. Es sollte tatsächlich 7: 00-7: 30 und 7: 00-8: 00 nicht verfügbar sein. die gespeicherte Prozedur ist
Dt: -12/12/2016; Serviceid: -1
CREATE PROCEDURE [dbo].[RealGetFollowUp] @Dt varchar(50), @ServiceId int
AS
--declare @starttime datetime = '2015-10-28 12:00', @endtime datetime = '2015-10-28 14:00'
DECLARE @starttime varchar(50),
@endtime varchar(50),
@interval int
SELECT
@starttime = Rules.from_dt,
@endtime = Rules.to_dt,
@interval = Service.Service_Duration
FROM Service
INNER JOIN Rules
ON Service.Service_Serno = Rules.Service_Id
WHERE Service.Service_Serno = @ServiceId
--SELECT * INTO #tmp FROM d;
DECLARE @slots int
SELECT
@slots = DATEDIFF(MINUTE, @starttime, @endtime)/@interval
SELECT TOP (@slots)
N = IDENTITY(int, 1, 1) INTO #Numbers
FROM master.dbo.syscolumns a
CROSS JOIN master.dbo.syscolumns b;
SELECT
DATEADD(MINUTE, ((n - 1) * @interval), @starttime) AS start,
DATEADD(MINUTE, (n * @interval), @starttime) AS todate INTO #slots
FROM #numbers
SELECT
@Dt AS 'Date',
LEFT(CONVERT(varchar, s.start, 108), 10) AS Start,
LEFT(CONVERT(varchar, s.todate, 108), 10) AS 'End',
CASE
WHEN b.start IS NULL THEN '-'
ELSE 'xx'
END AS Status
FROM [#slots] AS s
LEFT JOIN Booking AS b
ON s.start = b.start
AND s.todate = b.todate
AND b.Dt = @Dt
DROP TABLE #numbers, #slots
GO
ich überprüfen müssen, ob es ein Schlitz in der Buchung Tisch gebucht und auch wenn ich das Intervall in der Service-Tabelle zu ändern, die in der Buchungstabelle gebuchte Schlitz soll gezeigt werden, gebucht.
Wie ändern Sie das Intervall in der Service-Tabelle? Und was macht den reservierten Slot wieder verfügbar? – NickyvV
@NickyvV Ich ändere das Intervall von der ** Service_Dauer ** aus der Service-Tabelle. Beim Einfügen der Zeitfenster in die Tabelle ** Buchung werden sie nicht verfügbar "xxx" und wenn Sie es aus ** Buchung ** löschen, werden die Plätze verfügbar. – Fahad
Aber wie bezieht sich das Löschen von Booking auf das Ändern des Intervalls? Ist es dann manuell gemacht? – NickyvV