Question : Comment maintenir les dates d'une table d'histoire a-t-il aligné sans des lacunes ?

Bonjour, le

I doivent maintenir une table d'histoire, où donné une nouvelle entrée ou un disque est mis à jour, la table est recréée ou réaménagée (seulement pour des disques avec la même identification). Il ne devrait y avoir aucune lacune entre les disques. Chaque disque a un StartDate et un EndDate. Au-dessous de est le schéma de la table : TABLE du

CREATE [dbo]. [Histoire] (IDENTITÉ de bigint de
[HistoryID] (1, 1) PAS NULLE,
[identification] international NON NUL, date-heure du
[StartDate] NON NULLE, NULLE date-heure du
[EndDate], NULLE de tinyint du
[statut], CLÉ PRIMAIRE de CONTRAINTE du
[History_pk] GROUPÉE ([HistoryID]), le
GO

Here du
ON du
de CONTRAINTE du
[History_uq] ([identification], [StartDate])) est des données d'échantillon avec les dates alignées : le

The DateFormat est identification StartDate EndDate Status
1 1 de dd/mm/yyyy

HistoryID 01/01/2010 10/01/2010 1
2 1 11/01/2010 15/01/2010 2
3 1 16/01/2010 20/01/2010 3

Rules :
1.Get débarrassé de toutes rangées qui sont entièrement dans la marge de la nouvelle rangée étant insérée ou d'updated.
example : le

INSERT DANS l'extrémité ResultSet du

The du
VALUES (1, « 01/01/2010 », « 17/01/2010 », 2) de l'histoire (identification, StartDate, EndDate, statut) devrait être comme suit : l'identification StartDate EndDate Status
6 1 du
HistoryID du
01/01/2010 17/01/2010 2
3 1 18/01/2010 20/01/2010 3

Note que le disque avec HistoryID=3 ont le StartDate a augmenté de 1 en raison de l'EndDate du record précédent (6) sont plus grand que le StartDate du disque ci-dessous (3), que la gamme était de 16/01/2010 à 20/01/2010.

The le même comportement devrait s'appliquer si l'utilisateur fait à une mise à jour sur n'importe quel disque sur n'importe quel .

Following de champ (StartDate, EndDate, statut) le resultset précédent, laisse l'INSERTION plus de données dans l'identification StartDate EndDate Status
6 1 de table.

HistoryID 01/01/2010 17/01/2010 2
3 1 18/01/2010 20/01/2010 3

INSERT DANS l'histoire (

VALUES (1, « 05/01/2010 », « 10/01/2010 », 1) d'identification, de StartDate, d'EndDate, de statut)/>
ResultSet après l'insertion : l'identification StartDate EndDate Status
6 1 du

HistoryID 01/01/2010 04/01/2010 2
7 1 05/01/2010 10/01/2010 1
8 1 11/01/2010 17/01/2010 2
3 1 18/01/2010 20/01/2010 3

Now l'utilisateur change le disque avec HistoryID=3, avec la MISE À JOUR folowing :
StartDate='17/01/2010', RÉGLÉ EndDate='19/01/2010', Status=1
WHERE HistoryID=3

Resultset du
UPDATE : identification StartDate EndDate Status
6 1 du

HistoryID 01/01/2010 04/01/2010 2
7 1 05/01/2010 10/01/2010 1
8 1 11/01/2010 16/01/2010 2
3 1 17/01/2010 19/01/2010 1
9 1 20/01/2010 20/01/2010 INSERTION de 3


Another :

INSERT DANS

Resultset du
VALUES (1, le « 01/01/2010 », « 18/01/2010 », 1) de l'histoire (identification, StartDate, EndDate, statut) : identification StartDate EndDate Status
10 1 du

HistoryID 01/01/2010 19/01/2010 1
9 1 20/01/2010 20/01/2010 3

Note que les disques 7.8.3 ont été supprimés. Le nouveau disque supplémentaire prend l'EndDate modifié à 19/01/2010 en raison de l'EndDate du NO3 de disque a eu le même statut, ce des moyens, qu'il n'y a aucun besoin de garder ou modifier le NO3 de disque l'un ou l'autre, juste pour prendre l'EndDate de lui et pour le mettre sur le record.

I ne savent pas réaliser ce résultat ainsi que le comportement exposé ici. Je ne sais pas si son meilleur de le faire comme déclenchement ou d'écrire une procédure pour insérer des disques et de réaliser tout le travail dans it.

That´s il. S'il y a n'importe quel doute au sujet des règles, svp, me laissent know.

Thanks ! respect du

Best,

Marco André
class= de

Réponse : Comment maintenir les dates d'une table d'histoire a-t-il aligné sans des lacunes ?

salut Marco,

Le nombre important de disques peut présenter des problèmes d'exécution dans les deux scénarios. Le problème de base au sujet de l'exécution est toujours identique : Examiner tous les scénarios et comparer les résultats.

La conclusion de votre enregistrement historique correct est simple :

CHOISIR le PRINCIPAL 1 * DE [HistoryTable] OÙ [la date] <>
Vous pouvez employer une fonction définie pour l'utilisateur de table-valeur pour calculer ce disque, mais je ne peux pas deviner au sujet de son exécution. Peut-être il y a un frais se joignent, mais je ne peux pas imaginer un en ce moment ;)

L'utilisateur multiple que les problèmes sont les mêmes dans les deux solutions, il est le même problème au sujet de l'atomicité que dans le problème bien connu de transfert de compte bancaire. Vous avez besoin d'une commande explicite de transaction encapsulant votre logique et un niveau d'isolement de lire commettent ou améliorent.

mfG
--> Stefan <-->
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
CHOISIR  *
    [EventTable] d'E
        La CROIX S'APPLIQUENT [dbo]. [FindHistory] (E. [identification], E. [EventDate]) H ;

-- avec

CRÉER la FONCTION [FindHistory]
    (
      @ID COMME INTERNATIONAL,
      @EVENTDATE EN TANT QUE DATE-HEURE
    )
TABLE DE RETOURS
AS
RETOUR
    (PRINCIPAL CHOISI 1
                H.*
            [HistoryTable] de H
      LÀ OÙ     H.ID = @ID
                ET H. [HistoryDate] = @EventDate
      ORDRE PAR  H. [HistoryDate] DESC
    )
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us