none
Script Powershell import multiple CSV RRS feed

  • Question

  • Bonjour,

    Je réalise un script en powershell mais je bloque un peu sur mon script. Mon script import plusieurs CSV dans SQL Server (SAGE), il met à jour des stocks dans la base SAGE graçe a des fichiers CSV (qui sont des commandes de produits) dispose de plusieurs colonne (Reference, Quantité commander, prix,...) je souhaite donc mettre à jour la quantité dans la table SAGE. Voici mon script:

    $sql_instance_name = 'SERVER\SAGE100'
    $db_name = 'SERVER_DB'
    $table = "dbo.F_ARTSTOCK"
    
    $csv_folder = 'C:\IMPORTS'
    $csv_completed_folder = 'C:\done'
    $batchsize = 50000 
    
    # assuming only csv-files you want to import are located in $csv_folder
    $csv_files = Get-Childitem -Path $csv_folder -Filter '*.csv'
    
    # Build the sqlbulkcopy connection, and set the timeout to infinite 
    $connectionstring = "Data Source=$sql_instance_name;Integrated Security=true;Initial Catalog=$db_name;" 
    $bulkcopy = New-Object Data.SqlClient.SqlBulkCopy($connectionstring, [System.Data.SqlClient.SqlBulkCopyOptions]::TableLock) 
    $bulkcopy.DestinationTableName = $table 
    $bulkcopy.bulkcopyTimeout = 0 
    $bulkcopy.batchsize = $batchsize 
    
    foreach($file in $csv_files) {
        $impcsv = $file.FullName
    
        write-host "Processing file ..........$impcsv" -foregroundcolor green
        $data = import-csv -Delimiter ";" $impcsv
    
        $count = 1
    
        foreach($i in $data) {
    
        $reference = $i.Reference
        $quantity = $i.Quantity
    
        $query = "UPDATE dbo.F_ARTSTOCK (AR_Ref,AS_QteSto)
                  SET dbo.F_ARTSTOCK.AS_QteSto = dbo.F_ARTSTOCK.AS_QteSto - $quantity
                  WHERE dbo.F_ARTSTOCK.AR_Ref = $reference"
    
        $impcsv = invoke-sqlcmd -Database $db_name -Query $query  -serverinstance $sql_instance_name 
    
        write-host "Processing row ..........$count" -foregroundcolor green
    
        $count  = $count + 1
    
        }
    }

    Mon problème est que $i.Reference et $i.Quantity est vide alors que pourtant ma colonne existe bien et n'est pas vide.

    Avez-vous une idée d’où viendrait le problème ?

    Merci de votre aide.


    samedi 22 décembre 2018 21:07

Toutes les réponses

  • J'ai trouver l'erreur il me manquait -Delimiter ";" dans mon script j'ai mis à jour mon script par contre maintenant je rencontre une erreur :

    invoke-sqlcmd : La conversion de la valeur varchar '2200100001' a dépassé une colonne int.
    L'instruction a été arrêtée.
    Au caractère C:\Users\admin\Desktop\updateDb.ps1:36 : 19
    + ...   $impcsv = invoke-sqlcmd -Database $db_name -Query $query  -serverin ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation : (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
        + FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

    samedi 22 décembre 2018 21:38