MSDE, QUERY SCHEDULATA , OUTPUT IN ASCII

venerdì 21 marzo 2008 - 16.31

stevepastorius Profilo | Newbie

Chiedo un prezioso aiuto. Ho un db msde. Devo estrarre da una tabella alcuni record, in base a tipo e data.
Vorrei chiedere: 1- come posso crearmi una query e schedularla in modo che a ora stabilita, estragga i dati e li porti su un file
di testo ? Ho solo la consolle DbaMgr2k....e Osql, immagino...
Vhi mi aiuta? grazie 1000
ciao

lbenaglia Profilo | Guru

>Chiedo un prezioso aiuto. Ho un db msde. Devo estrarre da una
>tabella alcuni record, in base a tipo e data.
>Vorrei chiedere:
>1- come posso crearmi una query e schedularla
>in modo che a ora stabilita, estragga i dati e li porti su un
>file di testo ?

Ciao STEVE,

MSDE dispone del SQL Server Agent che ti permette di schedulare l'esecuzione di un comando.
Per esportare i dati su file di testo puoi ricorrere all'utility command line BCP.exe, specificando la query tramite il parametro queryout.

Sui Books Online troverai tutti i dettagli:

"bcp Utility"
http://msdn2.microsoft.com/en-us/library/ms162802.aspx

>Vhi mi aiuta? grazie 1000
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stevepastorius Profilo | Newbie

ok grazie...ho fatto un giro sui vari siti MSD, ho quasi capito...
Però..se io volessi esportare su un file a posizione e lunghezza fissi,
come faccio?
non riesco a capire il funzionamento del file di format.
Iodevo prelevare da una tabella, e posizionare su un file, es,
GGMMAAAA|HHMM|numerotessera|causale|
come gli dico ...esporta campo 1, da pos 3, lungh 10....cose di questo tipo?
StevePastorius ;-))

lbenaglia Profilo | Guru

>ok grazie...ho fatto un giro sui vari siti MSD, ho quasi capito...
>Però..se io volessi esportare su un file a posizione e lunghezza
>fissi,
>come faccio?
Devi ricorrere ai file di formato.
In questo post troverai un esempio:
http://groups.google.it/group/microsoft.public.it.sql/msg/568fe016eea9f13e

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stevepastorius Profilo | Newbie

ho provato cosi:
FILE BAT
=========
osql -S NAMEPC\ISTANCENAME -U sa -P sa -i C:\script22.sql

SCRIPT22
========
USE nomeDB
go
bcp "SELECT RIGHT(REPLICATE('0', 10),10) badge, causale, tipotran FROM TABELLA" queryout c:\punches.txt -fc:\formato.fmt
go
quit

formato
=======
<BOF>
8.0
3
1 SQLCHAR 0 10 "" 4 badge SQL_Latin1_General_CI_AS
2 SQLCHAR 0 5 "" 6 causale SQL_Latin1_General_CI_AS
3 SQLCHAR 0 1 "\r\n" 7 tipotran SQL_Latin1_General_CI_AS
<EOF>

MA NON MI TIRA FUORI NULLA!!!
from tabella? devo x caso from nomedb.dbo.tabella?
StevePastorius ;-))

lbenaglia Profilo | Guru

>ho provato cosi:
>FILE BAT
>=========
>osql -S NAMEPC\ISTANCENAME -U sa -P sa -i C:\script22.sql
Dato che dovresti utiliuzzare il SQL Server Agent per schedulare l'esportazione, questa chiamata a osql.exe è del tutto inutile.

>SCRIPT22
>========
>USE nomeDB
>go
>bcp "SELECT RIGHT(REPLICATE('0', 10),10) badge, causale, tipotran
>FROM TABELLA" queryout c:\punches.txt -fc:\formato.fmt
>go
>quit
Togli tutto ad eccezione della chiamata bcp. Specifica il db e l'owner prima della tabella (database.owner.tabella).

>formato
>=======
><BOF>
>8.0
>3
>1 SQLCHAR 0 10 ""
>4 badge SQL_Latin1_General_CI_AS
>2 SQLCHAR 0 5 ""
>6 causale SQL_Latin1_General_CI_AS
>3 SQLCHAR 0 1 "\r\n"
>7 tipotran SQL_Latin1_General_CI_AS
><EOF>
Non avendo la struttura della tabella non so dirti se quel file di formato è corretto o meno.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stevepastorius Profilo | Newbie

TI FACCIO TUTTA LA STORIA. se riesci ad aiutarmi ti ringrazio moltissimo. Non mi occupo quasi mai di lato DB sql, quindi ho parecchie......lacune....

questa è la tabella da cui parto....
[dbo].[TRANSAZIONI]
[idtrans] [int] IDENTITY (1, 1) NOT NULL ,
[term] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
[verso] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
[badge] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
[dataora] [datetime] NULL ,
[causale] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
[tipotran] [varchar] (255) COLLATE Latin1_General_CI_AS NULL ,
[modif] [varchar] (50) COLLATE Latin1_General_CI_AS NULL

questo deve essere il file di arrivo
ascii..
LUNGHEZZA DEL RECORD 28
CAMPI:

DA POSIZIONE 1 A POSIZIONE 3 = VUOTO
DA POSIZIONE 4 A POSIZIONE 13 = LUNGH.10 > NUMERO BADGE (NUMERICO)
DA POSIZIONE 14 A POSIZIONE 14 = LUNGH.1 > TIPOTIMBRATURE ( 1=ENTRA; 0=ESCE)
DA POSIZIONE 15 A POSIZIONE 18 = LUNGH.4 > CAUSALE (NUMERICA)
DA POSIZIONE 19 A POSIZIONE 24 = LUNGH.6 > DATA (GGMMAA)
DA POSIZIONE 25 A POSIZIONE 28 = LUNGH.4 > ORE E MINUTI (HHMM)

condizioni: devo estrarre solo i record con data odierna di sistema
e solo quelli di un [term] es. 001.

COME DEVO IMPOSTARE IL TUTTO? FAI CONTO CHE PARTIAMO DA ZERO.....GRAZIEEE
StevePastorius ;-))

lbenaglia Profilo | Guru

>COME DEVO IMPOSTARE IL TUTTO? FAI CONTO CHE PARTIAMO DA ZERO.....GRAZIEEE
Beh, mi stai chiedendo di preparti la soluzione da 0...
Anche volendo mi mancano diverse informazioni.
Per quale motivo il 99% delle colonne è di tipo varchar quando memorizzano informazioni numeriche?
La colonna "verso" che informazioni contiene?

Ti chiedo di semplificarci il lavoro postando la struttura riveduta e corretta della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO), ed un file ASCII zippato in attach con il risultato che vuoi ottenere partendo da quei dati.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stevepastorius Profilo | Newbie

Che dire....sei forte! grazie per tuo interessamento!!
La struttura tabella haimè è quella che è e me la devo tenere cosi'.

i dati , eccoli:
/* SELECT * FROM [dbo].[TRANSAZIONI] /*
/* /*
4;001;0;0000000001;22/03/2008 18.51.49;M0000;E;
5;001;1;0000000001;23/03/2008 21.55.06;M0000;U;
6;001;0;0000000001;23/03/2008 22.17.17;M0000;E;
7;001;0;0000000001;23/03/2008 22.19.37;M0000;E;
8;001;0;0000000002;24/03/2008 23.29.00;M0000;E;
9;001;1;0000000002;24/03/2008 23.29.59;M0000;U;
10;002;0;0000000001;26/03/2008 16.35.56;M0000;E;

IL VERSO DICE 0 SE ENTRO, 1 SE ESCO.
(andrebbe girato...)
Allego file ASCII zippato...
L'estrazione è fatta per giorno
ancora thanks...


StevePastorius ;-))
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5