ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
191
191
EMPFEHLEN
-
Hallo,
Ich habe eine Datenbank, die Termine eines Buchungssystems enthält. Nun habe ich eine SP, die Kollisionen erkennen soll und dementsprechend die IDs der kollidierenden events ausgibt.
Die SP befindet sich im Anhang.
Die Daten sind wie folgt:
Das ist das (Teil-)Ergebnis der Abfrage in Reihe 39 till 44:
Der Aufruf der Funktion ist:Code :1 2 3 4 5 6 7 8
event_id event_event_type event_series_type event_weekday event_date_from event_time_from event_date_to event_time_to 50648 0 0 NULL 2011-10-19 00:00:00.000 465 2011-10-19 00:00:00.000 1005 50823 0 0 NULL 2011-10-24 00:00:00.000 1080 2011-10-24 00:00:00.000 1200 50877 0 0 NULL 2011-11-03 00:00:00.000 1125 2011-11-03 00:00:00.000 1260 50965 1 1 15 2011-11-02 00:00:00.000 465 2011-12-06 00:00:00.000 990 50995 0 0 NULL 2011-10-25 00:00:00.000 390 2011-10-25 00:00:00.000 1230 50996 0 0 NULL 2011-10-26 00:00:00.000 390 2011-10-26 00:00:00.000 540 51036 0 0 NULL 2011-10-28 00:00:00.000 525 2011-10-28 00:00:00.000 735
SELECT event_id FROM dbo.checkA('18.10.2011 09:46', '08.11.2011 10:44', 2, 586, 644, null, null, null)
Liefert:
event_id
50316
50965
51874
Aber es sollte ebenso das Event mit der ID 50995 in der Liste sein, denn das ist ein Termin Dienstag 25.10.2011 die die Ressource blockiert und daher eine Kollision gibt.
Hier die SP:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
USE [lkshg4_test] GO /****** Object: UserDefinedFunction [dbo].[checkA] Script Date: 08/29/2011 21:47:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[checkA] (@datefrom datetime, @dateto datetime, @weekday INT,@timefrom INT, @timeto INT, @monthly INT, @quartal INT, @yearly INT) RETURNS @RESULT TABLE (event_id INT NOT NULL, chk_from datetime NULL, chk_to datetime NULL, serial INT NULL) AS BEGIN DECLARE @event_id INT DECLARE @event_series_type INT DECLARE @event_weekday INT DECLARE @event_weekday_ret INT DECLARE @event_date_from datetime DECLARE @event_time_from INT DECLARE @event_date_to datetime DECLARE @event_time_to INT DECLARE @event_event_type INT DECLARE @i INT DECLARE @e INT DECLARE @datum1 datetime DECLARE @datum2 datetime DECLARE @uhrzeit1 INT DECLARE @uhrzeit2 INT IF (@weekday IS NULL) SET @weekday=-1 IF (@monthly IS NULL) SET @monthly = -1 IF (@quartal IS NULL) SET @quartal =-1 IF (@yearly IS NULL) SET @yearly = -1 SET @uhrzeit1 = @timefrom SET @uhrzeit2 = @timeto IF (@uhrzeit1 IS NULL) BEGIN SET @uhrzeit1 = CAST((datepart(hh, @datefrom)*60)+datepart(mi, @datefrom) AS INT) END IF (@uhrzeit2 IS NULL) BEGIN SET @uhrzeit2 = CAST((datepart(hh, @dateto)*60)+datepart(mi, @dateto) AS INT) END DECLARE event_records cursor LOCAL FOR SELECT event_id, event_event_type, event_series_type, event_weekday, event_date_from, event_time_from, event_date_to, event_time_to FROM rrv_event WHERE ( dbo.isEqualNot(@datefrom, @dateto, dbo.getDateFull(event_date_from_internal,event_time_from_internal), dbo.getDateFull(event_date_to_internal,event_time_to_internal))=1 AND event_event_type=0) OR ( event_event_type=1 AND dbo.isEqualNot(dbo.truncDate(@datefrom), dbo.truncDate(@dateto), event_date_from, event_date_to)=1 ) OPEN event_records fetch NEXT FROM event_records INTO @event_id, @event_event_type, @event_series_type, @event_weekday, @event_date_from, @event_time_from, @event_date_to, @event_time_to while (@@fetch_status <> -1) BEGIN -- Normale Abfrage IF (@event_event_type=0 AND @weekday=-1 AND @monthly=-1 AND @quartal=-1 AND @yearly=-1) BEGIN INSERT INTO @RESULT (event_id, chk_from, chk_to, serial ) VALUES (@event_id, dbo.getDateFull(@datefrom, @uhrzeit1), dbo.getDateFull(@dateto, @uhrzeit2), 0) END -- Täglich IF (@event_event_type=1 AND @event_series_type=0 AND @weekday=-1 AND @monthly=-1 AND @quartal=-1 AND @yearly=-1) BEGIN IF (dbo.isEqualNotInt(@uhrzeit1, @uhrzeit2, @event_time_from, @event_time_to)=1) BEGIN INSERT INTO @RESULT (event_id, chk_from, chk_to, serial) VALUES (@event_id, dbo.getDateFull(@datefrom, @uhrzeit1), dbo.getDateFull(@dateto, @uhrzeit2), 1) END END -- Wöchentlich IF (@event_event_type=1 AND @event_series_type=1 AND @weekday<>-1) BEGIN IF (dbo.isEqualNotInt(@uhrzeit1, @uhrzeit2, @event_time_from, @event_time_to)=1) BEGIN SET @event_weekday_ret = 0 SET @e = 1 while (@e<129) BEGIN IF(@event_weekday_ret=0)SET @event_weekday_ret = dbo.isEqualInt((@weekday & @e),(@event_weekday & @e)) SET @e = @e + @e END IF(@event_weekday_ret=1) INSERT INTO @RESULT (event_id) VALUES (@event_id) END END -- Monatlich IF (@event_event_type=1 AND @event_series_type=2 AND @monthly <>-1) BEGIN IF (dbo.isEqualNotInt(@uhrzeit1, @uhrzeit2, @event_time_from, @event_time_to)=1) BEGIN IF (DAY(@datefrom)=DAY(@event_date_from)) BEGIN IF(@timefrom>=@event_time_from AND @timefrom<=@event_time_to) OR (@timeto>=@event_time_from AND @timeto<=@event_time_to) BEGIN INSERT INTO @RESULT (event_id) VALUES (@event_id) END END END END -- Quartal IF (@event_event_type=1 AND @event_series_type=3 AND @quartal <>-1) BEGIN IF (dbo.isEqualNotInt(@uhrzeit1, @uhrzeit2, @event_time_from, @event_time_to)=1) BEGIN IF ( DAY(@datefrom)=DAY(@event_date_from) AND (datediff(mm, @datefrom, @event_date_from) % 3)=0 ) BEGIN IF(@timefrom>=@event_time_from AND @timefrom<=@event_time_to) OR (@timeto>=@event_time_from AND @timeto<=@event_time_to) BEGIN INSERT INTO @RESULT (event_id) VALUES (@event_id) END END END END fetch NEXT FROM event_records INTO @event_id, @event_event_type, @event_series_type, @event_weekday, @event_date_from, @event_time_from, @event_date_to, @event_time_to -- Jaehrlich IF (@event_event_type=1 AND @event_series_type=4 AND @yearly <>-1) BEGIN IF (dbo.isEqualNotInt(@uhrzeit1, @uhrzeit2, @event_time_from, @event_time_to)=1) BEGIN IF ( DAY(@datefrom)=DAY(@event_date_from) AND MONTH(@datefrom)=MONTH(@event_date_from)) BEGIN IF(@timefrom>=@event_time_from AND @timefrom<=@event_time_to) OR (@timeto>=@event_time_from AND @timeto<=@event_time_to) BEGIN INSERT INTO @RESULT (event_id) VALUES (@event_id) END END END END END close event_records deallocate event_records RETURN END
Geändert von AlexD1979 (30.08.11 um 10:15 Uhr)
-
Als erstes sollten wir mal definieren mit was für einer Datenbank du arbeiten willst. MySQL, Oracle, MS SQL?
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo,
Sorry, es ist ein MS SQL 2008 R2 Server.
Was ich schon eingrenzen konnte, aber nicht weiß wie ich es lösen soll ist, dass die gewünschte Kollisiton mit ID 50995 angezeigt wird, wenn ich in der Zeile:
while (@@fetch_status <> -1)
begin
-- Normale Abfrage
if (@event_event_type=0 and @weekday=-1 and @monthly=-1 and @quartal=-1 and @yearly=-1)
das @weekday=-1 entferne, dann kommt die Kollision mit. Der Wert ist aber 2 durch den SP Aufruf. Leider kommen dann aber auch unerwünschte Ergebnisse mit, die nicht zu meiner Anfrage mit dem Wochentag-Bit = 2 passen.
-
Hab zwar kein Schimmer von MS SQL, aber:
Bitte schreibe deinen Code in die sog. Code-Tags - z.B. [sql][/sql] - die deinen Code formatieren. Danke!---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Ähnliche Themen
-
Kollisionen mit Xpresso
Von samurai78 im Forum Cinema 4DAntworten: 5Letzter Beitrag: 05.09.07, 20:51 -
Kollisionen?
Von TOBITULPI im Forum Flash PlattformAntworten: 4Letzter Beitrag: 19.05.06, 14:27 -
Quadtrees und Kollisionen in 2D Map
Von Zhoragh im Forum JavaAntworten: 0Letzter Beitrag: 19.07.05, 01:25 -
kollisionen
Von TimN im Forum Flash PlattformAntworten: 3Letzter Beitrag: 24.01.05, 12:38 -
Kollisionen mit DDraw
Von Asmo im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 06.08.04, 11:37





Zitieren


Login





