[SQL2005]Controllo di sovrapposizione di periodi

mercoledì 23 settembre 2009 - 16.49

Teech Profilo | Expert

Mi stò scervellando ma non capisco se si può fare e come...

Ho una tabella che contiene, fra gli altri, 2 campi datetime (Inizio As datetime e Fine As datetime).
Vorrei trovare un modo per controllare gli inserimenti e le variazioni di questi 2 campi di modo che i periodi non si sovrappongano fra di loro
Ad esempio, se ho la tabella compilata nel seguente modo:
Periodo1 - 01/01/2009 - 31/01/2009
Periodo 2 - 01/02/2009 - 15/03/2009
Periodo3 - 01/05/2009 - 31/05/2009
Vorrei che i seguenti inserimenti diano i risultati riportati a fianco
01/03/2009 - 31/03/2009 --> inserimento fallito in quanto sovrapposto al Periodo2
16/03/2009 - 31/03/2009 --> inserimento riuscito

Ovviamente il controllo dovrebbe essere anche in fase di variazione dei dati.
Questo mi serve per un programma che stò facendo in .NET ma vorrei evitare di ciclare tutte le volte la tabella da codice in quanto, con l'aumentare dei dati le prestazioni calerebbero...

Avete un consiglio su come agire direttamente in SQL?

Grazie
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

speedx Profilo | Junior Member

be direi che non c'è bisogno di ciclare tutte le volte, ma creare una funzione che controllo se il periodo di inserimento è compreso in uno già presente.

io farei una select che restituisce un valore > 0 se se la data inzio che vuoi inserie è già presente tipo:
SELECT COUNT(*) FROM Tabella WHERE datainserimento BETWEEN Datainizio AND DataFine

idem per datafine se ti serve...

Nel caso di molti record aggiungerei un indice coprente le colonne.

//// Marcello C.

rigutini Profilo | Newbie

ma nel caso il cui il nuovo periodo comprendesse tutto il periodo già immesso,..
nè la data di inizio nè quella di fine sarebbero comprese nell'intervallo esistente ;P


Forse devi escludere entrambi i casi:
Che la Nuova DataInizio sia compresa negli intervalli esistenti
e
che Tutte le EsistentiDateIniziali Non siano comprese nel nuovo periodo!

...
Spero!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5