Update SQL, en reprenant valeur précédante

cs_lucio57 Messages postés 146 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 25 juillet 2007 - 15 déc. 2005 à 15:25
gaa179 Messages postés 361 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 12 novembre 2009 - 16 déc. 2005 à 07:12
Bonjour,
Je cherche à savoir, si il est possible par requête SQL de faire un update sur un champ en lui affectant la valeur de l'enregistrement précédent.

Je m'explique
J'ai une table contenant le code du dossier, le n° de compte et le montant. Mais pour certaines lignes le code dossier n'est pas renseigné. Ce qui signifie que la ligne correspond au précédent code dossier lu.
Exempl
Dossier Compte Montant
1 601000 100000
415000 1500
300000 200
2 701000 50000
250000 400,50
1 602000 200000
405000 2500
310000 200
En fait les lignes 2, 3,7,8 correspondent au dossier 1 et la ligne 5 au dossier 2

Mon souci est que ces données sont intégré dans la base à partir d'un fichier TXT par lot DTS. Donc je cherche à mettre jour le champ dossier d'un seul coup sans avoir à tout parcourir parce que j'ai près 500.000 enregistrements et ça risque d'être galêre à tout traîter 1 par 1.

D'avance merci pour votre aide

1 réponse

gaa179 Messages postés 361 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 12 novembre 2009 2
16 déc. 2005 à 07:12
Salut,

Dans ton transfert TXT vers BD dans le DTS, utilise un VBScript pour faire le transfert de tes données. Tu pourras ainsi garder la valeur du précédent dans un variable local, et si pour le suivant la valeur est vide, tu place la valeur de ta variable. Voici un exemple de code qui fait un check sur les colonnes et puis qui transfert les valeurs.

DTSSource("Col001") est la première colonne de ton fichier, DTS Destination("[Nom du champ"]) est le champ de ta table.

'**********************************************************************
' Visual Basic Transformation Script
'************************************************************************


' Copy each source column to the destination column
Function Main()
Dim szStationNumber 'StationNumber with leading zeros


' Check the record type
IF DTSSource("Col001") = "E" then ' Header record
Main = DTSTransformStat_SkipRow ' Scip this record


ELSEIF DTSSource("Col001") = "T" then ' Record holding the totals
WriteTotals(DTSSource("Col003"))
Main = DTSTransformStat_SkipRow ' Scip this record


ELSEIF DTSSource("Col001") = "D" then ' Record holding data
'Perform transformation
'Check records
'Add leading zero's before the station number
szStationNumber = Right("000" & DTSGlobalVariables("StationNumber").Value,3)
if DTSSource("Col002") <> szStationNumber then
Main = DTSTransformStat_ExceptionRow
else
DTSDestination("CIMP_StationNumber") = DTSSource("Col002")
DTSDestination("CIMP_ClientReferenceNumber") = DTSSource("Col003")
DTSDestination("CIMP_KindOfEnergy") = DTSSource("Col004")
DTSDestination("CIMP_DeliveryNumber") = DTSSource("Col005")
DTSDestination("CIMP_CounterIdentification") = DTSSource("Col006")
DTSDestination("CIMP_RegionNumber") = DTSSource("Col007")
DTSDestination("CIMP_ExpiryDate") = DTSSource("Col008")
DTSDestination("CIMP_CounterSerialNumber") = DTSSource("Col009")
DTSDestination("CIMP_CounterNumberOfDigits") = DTSSource("Col010")
DTSDestination("CIMP_IndexRangeMin") = DTSSource("Col011")
DTSDestination("CIMP_IndexRangeMax") = DTSSource("Col012")
DTSDestination("CIMP_IndexValue") = DTSSource("Col013")
DTSDestination("CIMP_IndexDate") = DTSSource("Col014")
DTSDestination("CIMP_IndexTime") = DTSSource("Col015")
DTSDestination("CIMP_CounterPosition") = DTSSource("Col016")
DTSDestination("CIMP_Status") = DTSSource("Col017")
DTSDestination("CIMP_KeyDeliveryPlace") = DTSSource("Col018")
DTSDestination("CIMP_CodeConnection") = DTSSource("Col019")
Main = DTSTransformStat_OK
end if


ELSE ' Wrong record type
Main = DTSTransformStat_ExceptionRow
END IF
End Function
0
Rejoignez-nous