Esportare dati con sqlcmd

di il
1 risposte

Esportare dati con sqlcmd

Salve a tutti sto provando ad usare sqlcmd per esportare i dati di una tabella sqlserver in un file csv.

Ho problemi con i campi definiti numeric(18,5) esempio:

in tabella 9579.01000 diventa 957.901.000

come posso portarlo a €9579,01

grazie a tutti

 

1 Risposte

  • Re: Esportare dati con sqlcmd

    Salve,

    e' solitamente buona cosa mostrare il “codice” di cosa si e' gia' preparato per poterlo di solito almeno “commentare/correggere” insieme :D

    comunque, a me, l'esportazione “base” di un decimal(18,5)  9579.01000 NON RITORNA 957.901.000, bensi' , appunto, 9579.01000 .

    se vuoi comunque “troncarlo” al 2^ decimale, devi convertire il decimal(18,5) in un decimal(18,2), preceduto tendenzialmente da un ROUND(…) dove puoi anche impostare che tipo di arrotondamento desideri, ad esempio il puro troncamento al 2^ con  ROUND(valore. 2, 1) 
    (vedi sinossi di ROUND sui BOL di Microsoft)

    Tu desideri anche il simbolo di valuta a precedere, e sarebbe da valutare se questa valorizzazione e' una costante o dipendente da altra impostazione, compresa anche l'impostazione “internazionale” della login connessa a SQL Server, perche' di base, appunto, la valorizzazione del datatype {money} segue l'impostazione internazionale della login corrente.

    presupponendo che tu voglia un simbolo “costante” = €
    devi quindi concatenare una selezione castata in un varchar(sufficientemente dimensionata) di ‘€’ + valore arrotondato del decimal(18,5).

    trivialmente, considerando lo scenario seguente,

    CREATE TABLE dbo.Test (
        Id int NOT NULL PRIMARY KEY,
        DataVC varchar(10),
        DataDT datetime,
        DataDC decimal(18, 5)
        );
    INSERT dbo.Test
        VALUES (1, 'a2345f7890', GETDATE(), 9579.01);
    --<------
    SELECT Id, DataVC, DataDT, '€' + CONVERT(varchar(20), CONVERT(decimal(18,2),ROUND(DataDC, 2, 1))) FROM dbo.Test;
    

    che verra' poi eseguito come

    sqlcmd -E -S.\istanza -d nomeDB -o "C:\temp\atest.csv" -Q "SET NOCOUNT ON; SELECT Id, DataVC, DataDT, '€' + CONVERT(varchar(20), CONVERT(decimal(18,2),ROUND(DataDC, 2, 1))) FROM dbo.Test;" -s"," -h-1
    
    --<---file C:\temp\atest.csv -----
             1,a2345f7890,2024-05-23 09:09:55.950,€9579.01             
    

    presta attenzione alla valorizzazione del parametro -w, che dimensiona la riga di esportazione e deve essere sufficientemente dimensionata per accogliere “la riga piu' lunga”

    salutoni romagnoli
    – 
    Andrea

Devi accedere o registrarti per scrivere nel forum
1 risposte