giovedì 9 ottobre 2014

Estrarre il giorno della settimana dalla data da linea di comando

Certe volte è necessario, direttamente da linea di comando, inserire nel nome di un file il giorno della settimana, per esempio per distinguere i backup.

Sfortunatamente il comando DATE non visualizza il giorno della settimana se non modificando a livello di sistema il formato della data, ma la modifica potrebbe creare altri problemi ad altri programmi.

Di seguito il comando, da inserire in un batch, che restituisce in una variabile di sistema il giorno della settimana. Variabile da utilizzare nel formare il nome del file.
for /F %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /format:list ^| findstr "=" ') DO (set %%A )
Il comando attribuisce alla variabile DayofWeek il giorno della settimana. Esempio mercoledi = 3.

Di seguito un semplice batch per la copia distinta per giorno della settimana di un database di SqlServer

-------------------------------

rd /s /q c:\backupSQL
md c:\backupSQL
sqlcmd -U user -P password -S server -i c:\backupSQL.txt

for /F %%A in ('WMIC Path Win32_LocalTime Get DayOfWeek /format:list ^| findstr "=" ') DO (set %%A )


echo > \\nas\backupSQL\SIGLAPP-%DayOfWeek:~0,1%.BAK

xcopy c:\backupSQL\SIGLAPP.BAK \\nas\backupSQL\SIGLAPP-%DayOfWeek:~0,1%.BAK /Y


----------------------------------

NB. La riga "echo > \\nas\backupSQL\SIGLAPP-%DayOfWeek:~0,1%.BAK" crea il file di destinazione perchè altrimenti l'xcopy non trovando la destinazione si ferma chiedendo se si tratta di file o directory.

Testato su Windows Server 2012 e Windows 8.

fonte : http://stackoverflow.com/questions/11364147/setting-a-windows-batch-file-variable-to-the-day-of-the-week



Ricostruzione indici su Sql Server (REBUILD INDEX)

Sulle versioni Express di SqlServer non è presente la manutenzione del database dove è possibile fare un rebuild di tutti gli indici del database.

Di seguito uno script da eseguire manualmente o inserire nello script di backup.

Lo script fa un rebuild di tutti gli indici di tutti i database user, escludendo quindi i database di sistema.

fonte : http://www.mssqltips.com/sqlservertip/1367/sql-server-script-to-rebuild-all-indexes-for-all-tables-and-all-databases/

---------------------------------------------------
DECLARE @Database VARCHAR(255)  
DECLARE @Table VARCHAR(255)  
DECLARE @cmd NVARCHAR(500)  
DECLARE @fillfactor INT

SET @fillfactor = 90

DECLARE DatabaseCursor CURSOR FOR  
SELECT name FROM master.dbo.sysdatabases  
WHERE name NOT IN ('master','msdb','tempdb','model','distribution')  
ORDER BY 1  

OPEN DatabaseCursor  

FETCH NEXT FROM DatabaseCursor INTO @Database  
WHILE @@FETCH_STATUS = 0  
BEGIN  

   SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +
  table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES
  WHERE table_type = ''BASE TABLE'''  

   -- create table cursor  
   EXEC (@cmd)  
   OPEN TableCursor  

   FETCH NEXT FROM TableCursor INTO @Table  
   WHILE @@FETCH_STATUS = 0  
   BEGIN  
       IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9)
       BEGIN
           -- SQL 2005 or higher command
           SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
           EXEC (@cmd)
       END
       ELSE
       BEGIN
          -- SQL 2000 command
          DBCC DBREINDEX(@Table,' ',@fillfactor)  
       END

       FETCH NEXT FROM TableCursor INTO @Table  
   END  

   CLOSE TableCursor  
   DEALLOCATE TableCursor  

   FETCH NEXT FROM DatabaseCursor INTO @Database  
END  
CLOSE DatabaseCursor  
DEALLOCATE DatabaseCursor 


---------------------------------------------------






venerdì 3 ottobre 2014

Creazione documento PDF con Word - Attenzione ai font

Quando viene creato un PDF da Microsoft Word è necessario prestare attenzione al font utilizzato all'interno del documento altrimenti il documento PDF generato avrà una dimensione maggiore del previsto.
Questo perchè se il font utilizzato non è fra quelli predefiniti dallo standard PDF, Word incorpora il font dentro il file PDF.

Come si può notare dalla tabella, utilizzando il font standard di Word ( Calibri ), il file PDF risultante ha una dimensione di 83 Kb.
Utilizzando il font Arial, il file PDF risultante ha una dimensione di soli 3 Kb.


FontDim. DocxDim. PDF
Calibri13 Kb83 Kb
Arial13 Kb3 Kb

mercoledì 30 aprile 2014

Script per record doppi

La segnalazione "La connessione è occupata dai risultati di un altro comando/statement" è determinata dalla presenza di record con chiave duplicata in una o più tabelle della base dati di SIGLA (potrebbe anche accadere che la segnalazione non sia direttamente visibile e si ottenga solo un errore generico di protezione).

La prima cosa da fare in questo caso ("connessione occupata") è un'analisi approfondita dei dati al fine di determinare se in una certa tabella esistono dei duplicati (record doppi rispetto alla chiave univoca della tabella). Inoltre l'utilizzo di database con una collating sequence di tipo CASE INSENSITIVE può aumentare la probabilità di incorrere nella presenza di record doppi.

Per l'analisi è necessario operare direttamente sulla base dati con gli strumenti messi a disposizione dal DBMS.


Lo script sotto riportato permette di controllare tutte le tabelle dei dati comuni e ditta per verificare se ci sono dei record doppi.

Script per record doppi

domenica 27 aprile 2014

Link utili per Spesometro 2013/2014 ecc.

Home page su Agenzia Entrate - Link

Provvedimento 2013/94908 del 02/08/2013 - Link

Modello e istruzioni - Link

Stati Membri Cee
http://www.comunitaeuropea.com/statimembri/
http://assistenza.agenziadogane.it/KnowledgeBases/Tel_Dogane_Procedura/attach/sistema_intrastat.pdf

Stati in black list
http://www.guidafisco.it/paesi-black-list-elenco-aggiornato-773

Codici Attività
http://www.istat.it/it/archivio/17888

Lista e codici Paesi
http://www.agenziaentrate.gov.it/wps/content/Nsilib/Nsi/Strumenti/Modelli/ModulisticaAP/Modelli+di+dichiarazione/2007/Unico+PF+2007/Fascicolo_1/6_Elenco_paesi_dei_territori+esteri1/Elenco_dei_paesi_e_dei_territori_esteri.html

https://s3.amazonaws.com/FILE-PDF/SERVIZI/BLACK-LIST/A2-ELENCO-PAESI-TERRITORI-ESTERI.pdf

Trigger "intelligenti" in DB2

Nelle vecchie versioni del DB2 non c'era la possibilità di disabilitare un trigger.

Qui sotto c'è sintassi per un trigger controllato dal valore inserito in una tabella.

Testato su Db2 Express-C 9.7.4


CREATE TRIGGER TRG_ANAMAGA_I  
AFTER INSERT ON ANAMAGA 
REFERENCING NEW AS N FOR EACH ROW
MODE DB2SQL 

WHEN ('Y' = (SELECT STATUS
            FROM USRTRIGGER_CONTROL
            WHERE TRIGGER_NAME = 'TRG_ANAMAGA_I'))

BEGIN ATOMIC  

INSERT INTO USRLOG (DATAORA,TABELLA,OPERAZIONE,CHIAVE) VALUES  ( CURRENT TIMESTAMP, 'ANAMAGA', 'I', CODICE );

END

martedì 22 aprile 2014

Estrarre la struttura di una tabella con DB2

Se si vuole conoscere la struttura di una tabella per ricrearla, DB2 mette a disposizione un tool chiamato DB2LOOK.
Il programma non si trova nella cartella BIN ma nella cartella MISC.

La sintassi è la seguente : 

db2look -d DBname [-u Creator] [-s] [-g] [-a] [-t Tname1 Tname2...TnameN] [-p] [-o Fname]
db2look -d DBname [-u Creator] [-a] [-e] [-t Tname1 Tname2...TnameN] [-m] [-c] [-r] [-o Fname]
db2look [-h]

        -d: Database name. *MUST* be specified

        -a: generate stats for all creators
        -c: do not generate commit statement for mimic
        -e: extract DDL file needed to duplicate database
        -g: use graph to show fetch page pairs for indices
        -h: more detailed help message
        -m: run the program in mimic mode
        -o: output filename
        -p: use plain text format
        -r: do not generate runstats statement for mimic
        -s: generate postscript file
        -t: generate stats for the specified tables
        -u: creator ID. If -u and -a are both not specified then
            Environment variable USER will be used

Un esempio di creazione di un file di testo contenente la struttura della tabella MOVCO del database DITTA1 dell'utente db2admin è la seguente : 
DB2LOOK -d DITTA1 -t MOVCO -o C:\MOVCO.TXT -u db2admin -p -e

domenica 6 aprile 2014

SQL UPDATE su tabella prendendo dati da altre tabelle

Una interessante sintassi per l'UPDATE su SQL SERVER

Esempio che riporta su un campo di MOVIVA la partita iva del cliente corrispondente

UPDATE MOVIVA SET MOVIVA.CODEVENTO = 'C2011' + CLIFO.PAIV
FROM MOVIVA
INNER JOIN CLIFO ON CLIFO.CODICE = MOVIVA.SOTTOCONTO
WHERE MOVIVA.DATAREG>='20110101' 

AND MOVIVA.DATAREG<='20111231'
AND MOVIVA.C_F='C'
AND MOVIVA.TIPODOCIVA='FT'


martedì 1 aprile 2014

Migliorare le prestazioni su MOVCO

Con il crescere dei movimenti alcune operazioni contabili diventano particolarmente lente. Di seguito sono elencati gli script per la generazione di due indici sulla tabella MOVCO che aumentano le prestazioni in determinate operazioni.

  • CREATE INDEX USRMOVCO1 ON MOVCO (ATT_PASSIV,SOSPESO_SN,SCADENZ_SN,DATASCAD)Velocizza presentazione effetti
  • CREATE INDEX USRMOVCO2 ON MOVCO (RIFENUMRO)Velocizza ricontabilizzazione documenti


Esempio trigger Sql Server

Esempio Trigger per rilevazioni modifiche su MOVIMAG

CREATE TRIGGER MOVIMAGUPD ON MOVIMAG
FOR UPDATE AS
INSERT INTO USRMOVIMAGSTOR (
              USRDATA, USROPERAZIONE ,          
  ESERCIZIO  , NUMERO     , RIGA       , TIPO       , 
  DATA       , ESEDOC     , NUMERODOC  , RIGADOC    , 
  TIPODOC    , DATADOC    , ESERCIPROT , NUMEROPROT , 
  RIGAPROT   , TIPOPROT   , DATAPROT   , TIPOEFFET  , 
  ESERIF     , NUMERORIF  , RIGARIF    , TIPORIF    , 
  DATARIF    , ESECOLLEG  , NUMCOLLEG  , RIGACOLLEG , 
  TIPOCOLLEG , DATACOLLEG , DATAPREEVA , ARTICOLO   , 
  VARIANTE   , STAGIONE   , MAGAZZINO  , IMBALLO    , 
  UNIMISURA  , MOVITAG_SN , TIPOTAGLIA , CALZATA    , 
  CAUSALE    , DESCRAGG   , C_F        , CLI_FOR    , 
  CONTROPART , CODVALUTA  , DATAVALUTA , CAMBIO     , 
  QUANTITA   , QUANTCONFE , EVASO      , PRNETTO    , 
  PRLORDO    , PRIVACOMPR , IVAOMAGGI  , PRLISTINO  , 
  BASERICAR  , PERCRICAR  , PRVALUTA   , PRVALUTAN  , 
  SCONTO1    , SCONTO2    , SCONTO3    , SCONTO4    , 
  SCONTO5    , MAGGIOR1   , MAGGIOR2   , CODIVA     , 
  CODLISTIN  , PESOKG     , NUMCOLLI   , NUMPARTITA , 
  AGENTE     , PROVAGENTE , CAPOZONA   , PROVCAPOZO , 
  SOSPESO_SN , NOTA_SN    , COMM_SN    , NETTO_SN   , 
  OMAGGIO_SN , DEFINIT_SN , PROVVIS_SN , MAGFISC_SN , 
  EVASION_SN , DISTINT_SN , INVENTARIO , CARICO     , 
  SCARICO    , ACARICO    , ASCARICO   , IMPEGNATO  , 
  ROTTAMATO  , ORDCLI     , ORDFORN    , ATTCOLLAUD , 
  ATTSPEDIZ  , AVALORE    , AQUANTITA  , AGG_TOTALI , 
  SELEZIONE  , NUMCARTELL , NUMCOMMESS , FILE1      , 
  FILE2      , FILE3      , UTENTE     , ULT_AGG    , 
  PRSTATISTI , PRSTATIST1 , NUMPROTRIF , PRSTATIST2 , 
  CENTRCOSTO , REVISIO_SN , AGGIORN_SN , CHIAVE_EST , 
  FORZEVA_SN , DESARTICOL , ECAMBIO    , EPRNETTO   , 
  EPRLORDO   , EPRLISTINO , EBASERICAR , UBICAZIONE , 
  MOLOTTI_SN , QTACQUISTO , PRACQUISTO , UNITAMIACQ , 
  NOTAIMP_SN , NOTASTA_SN , NOTARIP_SN , BARCODE    , 
  MATRIC_SN  , NUM_MATR  ) 
           SELECT 
              CONVERT(nvarchar(30), GETDATE(), 21), 'V1',
  ESERCIZIO  , NUMERO     , RIGA       , TIPO       , 
  DATA       , ESEDOC     , NUMERODOC  , RIGADOC    , 
  TIPODOC    , DATADOC    , ESERCIPROT , NUMEROPROT , 
  RIGAPROT   , TIPOPROT   , DATAPROT   , TIPOEFFET  , 
  ESERIF     , NUMERORIF  , RIGARIF    , TIPORIF    , 
  DATARIF    , ESECOLLEG  , NUMCOLLEG  , RIGACOLLEG , 
  TIPOCOLLEG , DATACOLLEG , DATAPREEVA , ARTICOLO   , 
  VARIANTE   , STAGIONE   , MAGAZZINO  , IMBALLO    , 
  UNIMISURA  , MOVITAG_SN , TIPOTAGLIA , CALZATA    , 
  CAUSALE    , DESCRAGG   , C_F        , CLI_FOR    , 
  CONTROPART , CODVALUTA  , DATAVALUTA , CAMBIO     , 
  QUANTITA   , QUANTCONFE , EVASO      , PRNETTO    , 
  PRLORDO    , PRIVACOMPR , IVAOMAGGI  , PRLISTINO  , 
  BASERICAR  , PERCRICAR  , PRVALUTA   , PRVALUTAN  , 
  SCONTO1    , SCONTO2    , SCONTO3    , SCONTO4    , 
  SCONTO5    , MAGGIOR1   , MAGGIOR2   , CODIVA     , 
  CODLISTIN  , PESOKG     , NUMCOLLI   , NUMPARTITA , 
  AGENTE     , PROVAGENTE , CAPOZONA   , PROVCAPOZO , 
  SOSPESO_SN , NOTA_SN    , COMM_SN    , NETTO_SN   , 
  OMAGGIO_SN , DEFINIT_SN , PROVVIS_SN , MAGFISC_SN , 
  EVASION_SN , DISTINT_SN , INVENTARIO , CARICO     , 
  SCARICO    , ACARICO    , ASCARICO   , IMPEGNATO  , 
  ROTTAMATO  , ORDCLI     , ORDFORN    , ATTCOLLAUD , 
  ATTSPEDIZ  , AVALORE    , AQUANTITA  , AGG_TOTALI , 
  SELEZIONE  , NUMCARTELL , NUMCOMMESS , FILE1      , 
  FILE2      , FILE3      , UTENTE     , ULT_AGG    , 
  PRSTATISTI , PRSTATIST1 , NUMPROTRIF , PRSTATIST2 , 
  CENTRCOSTO , REVISIO_SN , AGGIORN_SN , CHIAVE_EST , 
  FORZEVA_SN , DESARTICOL , ECAMBIO    , EPRNETTO   , 
  EPRLORDO   , EPRLISTINO , EBASERICAR , UBICAZIONE , 
  MOLOTTI_SN , QTACQUISTO , PRACQUISTO , UNITAMIACQ , 
  NOTAIMP_SN , NOTASTA_SN , NOTARIP_SN , BARCODE    , 
  MATRIC_SN  , NUM_MATR     ,   FROM DELETED;

INSERT INTO USRMOVIMAGSTOR (
              USRDATA, USROPERAZIONE ,          
  ESERCIZIO  , NUMERO     , RIGA       , TIPO       , 
  DATA       , ESEDOC     , NUMERODOC  , RIGADOC    , 
  TIPODOC    , DATADOC    , ESERCIPROT , NUMEROPROT , 
  RIGAPROT   , TIPOPROT   , DATAPROT   , TIPOEFFET  , 
  ESERIF     , NUMERORIF  , RIGARIF    , TIPORIF    , 
  DATARIF    , ESECOLLEG  , NUMCOLLEG  , RIGACOLLEG , 
  TIPOCOLLEG , DATACOLLEG , DATAPREEVA , ARTICOLO   , 
  VARIANTE   , STAGIONE   , MAGAZZINO  , IMBALLO    , 
  UNIMISURA  , MOVITAG_SN , TIPOTAGLIA , CALZATA    , 
  CAUSALE    , DESCRAGG   , C_F        , CLI_FOR    , 
  CONTROPART , CODVALUTA  , DATAVALUTA , CAMBIO     , 
  QUANTITA   , QUANTCONFE , EVASO      , PRNETTO    , 
  PRLORDO    , PRIVACOMPR , IVAOMAGGI  , PRLISTINO  , 
  BASERICAR  , PERCRICAR  , PRVALUTA   , PRVALUTAN  , 
  SCONTO1    , SCONTO2    , SCONTO3    , SCONTO4    , 
  SCONTO5    , MAGGIOR1   , MAGGIOR2   , CODIVA     , 
  CODLISTIN  , PESOKG     , NUMCOLLI   , NUMPARTITA , 
  AGENTE     , PROVAGENTE , CAPOZONA   , PROVCAPOZO , 
  SOSPESO_SN , NOTA_SN    , COMM_SN    , NETTO_SN   , 
  OMAGGIO_SN , DEFINIT_SN , PROVVIS_SN , MAGFISC_SN , 
  EVASION_SN , DISTINT_SN , INVENTARIO , CARICO     , 
  SCARICO    , ACARICO    , ASCARICO   , IMPEGNATO  , 
  ROTTAMATO  , ORDCLI     , ORDFORN    , ATTCOLLAUD , 
  ATTSPEDIZ  , AVALORE    , AQUANTITA  , AGG_TOTALI , 
  SELEZIONE  , NUMCARTELL , NUMCOMMESS , FILE1      , 
  FILE2      , FILE3      , UTENTE     , ULT_AGG    , 
  PRSTATISTI , PRSTATIST1 , NUMPROTRIF , PRSTATIST2 , 
  CENTRCOSTO , REVISIO_SN , AGGIORN_SN , CHIAVE_EST , 
  FORZEVA_SN , DESARTICOL , ECAMBIO    , EPRNETTO   , 
  EPRLORDO   , EPRLISTINO , EBASERICAR , UBICAZIONE , 
  MOLOTTI_SN , QTACQUISTO , PRACQUISTO , UNITAMIACQ , 
  NOTAIMP_SN , NOTASTA_SN , NOTARIP_SN , BARCODE    , 
  MATRIC_SN  , NUM_MATR   ) 
           SELECT 
              CONVERT(nvarchar(30), GETDATE(), 21), 'V2',
  ESERCIZIO  , NUMERO     , RIGA       , TIPO       , 
  DATA       , ESEDOC     , NUMERODOC  , RIGADOC    , 
  TIPODOC    , DATADOC    , ESERCIPROT , NUMEROPROT , 
  RIGAPROT   , TIPOPROT   , DATAPROT   , TIPOEFFET  , 
  ESERIF     , NUMERORIF  , RIGARIF    , TIPORIF    , 
  DATARIF    , ESECOLLEG  , NUMCOLLEG  , RIGACOLLEG , 
  TIPOCOLLEG , DATACOLLEG , DATAPREEVA , ARTICOLO   , 
  VARIANTE   , STAGIONE   , MAGAZZINO  , IMBALLO    , 
  UNIMISURA  , MOVITAG_SN , TIPOTAGLIA , CALZATA    , 
  CAUSALE    , DESCRAGG   , C_F        , CLI_FOR    , 
  CONTROPART , CODVALUTA  , DATAVALUTA , CAMBIO     , 
  QUANTITA   , QUANTCONFE , EVASO      , PRNETTO    , 
  PRLORDO    , PRIVACOMPR , IVAOMAGGI  , PRLISTINO  , 
  BASERICAR  , PERCRICAR  , PRVALUTA   , PRVALUTAN  , 
  SCONTO1    , SCONTO2    , SCONTO3    , SCONTO4    , 
  SCONTO5    , MAGGIOR1   , MAGGIOR2   , CODIVA     , 
  CODLISTIN  , PESOKG     , NUMCOLLI   , NUMPARTITA , 
  AGENTE     , PROVAGENTE , CAPOZONA   , PROVCAPOZO , 
  SOSPESO_SN , NOTA_SN    , COMM_SN    , NETTO_SN   , 
  OMAGGIO_SN , DEFINIT_SN , PROVVIS_SN , MAGFISC_SN , 
  EVASION_SN , DISTINT_SN , INVENTARIO , CARICO     , 
  SCARICO    , ACARICO    , ASCARICO   , IMPEGNATO  , 
  ROTTAMATO  , ORDCLI     , ORDFORN    , ATTCOLLAUD , 
  ATTSPEDIZ  , AVALORE    , AQUANTITA  , AGG_TOTALI , 
  SELEZIONE  , NUMCARTELL , NUMCOMMESS , FILE1      , 
  FILE2      , FILE3      , UTENTE     , ULT_AGG    , 
  PRSTATISTI , PRSTATIST1 , NUMPROTRIF , PRSTATIST2 , 
  CENTRCOSTO , REVISIO_SN , AGGIORN_SN , CHIAVE_EST , 
  FORZEVA_SN , DESARTICOL , ECAMBIO    , EPRNETTO   , 
  EPRLORDO   , EPRLISTINO , EBASERICAR , UBICAZIONE , 
  MOLOTTI_SN , QTACQUISTO , PRACQUISTO , UNITAMIACQ , 
  NOTAIMP_SN , NOTASTA_SN , NOTARIP_SN , BARCODE    , 
  MATRIC_SN  , NUM_MATR      FROM INSERTED;