none
Migration vers SQL Server - Datetime null RRS feed

  • Question

  •  

    Bonjour,

    Je suis en train de migrer des données d'une base de données Pervasive vers SQLServer via SSIS.
    Du coté pervasive les dates sont en date string soit :
    20080717 pour le 17 juillet 2008
    00000000 pour une date nulle
    Je parse donc mes données dans un script en VB afin d'obtenir un datetime coté SQL server.
    Tout fonctionne pour une date normale mais j'obtiens une date au 30/12/1899 pour les dates  '00000000'.

    J'ai essayé de contourner le problème par un sqldatetime égal à nul mais ca ne marche pas non plus (ci joint code)


    Code Snippet
    Public Class ScriptMain
        Inherits UserComponent
        Dim datenull AS SqlDateTime
     
     
        Public Overrides Sub Entrée0_ProcessInputRow(ByVal Row AS Entrée0Buffer)
            '
            datenull = SqlDateTime.Null
     
     
            ' Parsage de la date de création
            IF NOT Row.DateCreation_IsNull Then
                IF Row.DateCreation = "00000000" Then
                    Row.TDateCreation = datenull
     
                Else
                    Dim Annee AS Integer = Integer.Parse(Row.DateCreation.Substring(0, 4))
                    Dim Mois AS Integer = Integer.Parse(Row.DateCreation.Substring(4, 2))
                    Dim jour AS Integer = Integer.Parse(Row.DateCreation.Substring(6, 2))
                    Row.TDateCreation = New DateTime(Annee, Mois, jour)
     
                End IF
     
     
        End Sub
     
    End Class
            End IF

     

     


      
      
      J'ai autorisé le nul sur le champs datetime et je souhaiterais qu'il reste à NULL s'il rencontre une valeur '00000000' dans la base pervasive.

    Quelqu'un a-t-il une idée?

     

    Merci d'avance

    vendredi 18 juillet 2008 14:47

Réponses

  • bonjour,

     

    je crois que tout simplement il faut rien faire quand date='000000' a condition que la valeur par défaut de la colonne datecreation soit null.

     

    donc ton script devient le suivant :

    Code Snippet

    .......

    IF NOT Row.DateCreation_IsNull Then
                IF not Row.DateCreation = "00000000" Then
              
                    Dim Annee AS Integer = Integer.Parse(Row.DateCreation.Substring(0, 4))
                    Dim Mois AS Integer = Integer.Parse(Row.DateCreation.Substring(4, 2))
                    Dim jour AS Integer = Integer.Parse(Row.DateCreation.Substring(6, 2))
                    Row.TDateCreation = New DateTime(Annee, Mois, jour)
     ........

     

     


     salut

     

    mercredi 23 juillet 2008 11:02
  • Bonjour,

     

    Comment avez-vous défini votre  date ? en datetime ou smalldatetime ?

    http://msdn.microsoft.com/en-us/library/ms187819(SQL.90).aspx

     

    smalldatetime  : "January 1, 1900, through June 6, 2079"

    et la date "00000000" en smalldatetime , je n'ai jamais testé mais je pense qu'il va y avoir un petit problème vu la façon dont la date est stockée

     

    Est-ce que vous pourriez fournir la structure des colonnes de votre table ?

     

    En attendant plus de précisions de votre part

     

    Bonne journée..

     

    PS : je n'utilise plus Integer.Parse mais Integer.TryParse qui retourne un Boolean ( faux si la zône n'est pas numérique , vrai si la zône peut être transformée en entier).

    Cela permet d'éviter des plantages peu glorieux en cas de valeurs non numériques ( et des problèmes pour tout rattaper )

    Attention, TryParse a un 2ème parametre qui est en "out" . Vous travaillez en VB, donc pas de problème, mais en VC#, le compilateur "râle".

    http://msdn.microsoft.com/en-us/library/f02979c7.aspx
    mercredi 13 août 2008 17:16

Toutes les réponses

  • bonjour,

     

    je crois que tout simplement il faut rien faire quand date='000000' a condition que la valeur par défaut de la colonne datecreation soit null.

     

    donc ton script devient le suivant :

    Code Snippet

    .......

    IF NOT Row.DateCreation_IsNull Then
                IF not Row.DateCreation = "00000000" Then
              
                    Dim Annee AS Integer = Integer.Parse(Row.DateCreation.Substring(0, 4))
                    Dim Mois AS Integer = Integer.Parse(Row.DateCreation.Substring(4, 2))
                    Dim jour AS Integer = Integer.Parse(Row.DateCreation.Substring(6, 2))
                    Row.TDateCreation = New DateTime(Annee, Mois, jour)
     ........

     

     


     salut

     

    mercredi 23 juillet 2008 11:02
  • Bonjour,

     

    Comment avez-vous défini votre  date ? en datetime ou smalldatetime ?

    http://msdn.microsoft.com/en-us/library/ms187819(SQL.90).aspx

     

    smalldatetime  : "January 1, 1900, through June 6, 2079"

    et la date "00000000" en smalldatetime , je n'ai jamais testé mais je pense qu'il va y avoir un petit problème vu la façon dont la date est stockée

     

    Est-ce que vous pourriez fournir la structure des colonnes de votre table ?

     

    En attendant plus de précisions de votre part

     

    Bonne journée..

     

    PS : je n'utilise plus Integer.Parse mais Integer.TryParse qui retourne un Boolean ( faux si la zône n'est pas numérique , vrai si la zône peut être transformée en entier).

    Cela permet d'éviter des plantages peu glorieux en cas de valeurs non numériques ( et des problèmes pour tout rattaper )

    Attention, TryParse a un 2ème parametre qui est en "out" . Vous travaillez en VB, donc pas de problème, mais en VC#, le compilateur "râle".

    http://msdn.microsoft.com/en-us/library/f02979c7.aspx
    mercredi 13 août 2008 17:16