Newsgroup: it.comp.lang.visual-basic
Titolo: Copiare tabella sql in add con aggiunta di campi.

Ciao a tutti avrei bisogno di copiare delle tabelle in una tabella
storico.
La struttura tabella storica è identica a quella di partenza con
l'aggiunta di 3 campi che identificano la lavorazione, ovviamente la
tabella storica non va di volta in volta sovrascritta, ma i dati vanno
copiati in add.
Con i recordset saprei farlo ma vorrei risolvere con delle operazioni
sql, che dovrebbero essere più performanti.
Il primo problema è sull' add, infatti se faccio
INSERT  INTO <storico> *  VALUES(select * from <tabella_lavorazione>)
a parte la sintassi che probabilemte non è corretta, e sulla quale
chiedo lumi, ho paura che vada in REPLACE, o sbaglio?
Oltre ai dati della tabella <tabella_lavorazione>, devo aggiungere tre
quattro campi ausiliari che servono per identificare la lavorazione di
partenza. Potrei fare una cosa del tipo:
INSERT INTO <storico> (NEWFLD1, NEWFLD2, NEWFLD3, FLD1, FLD2,
FLD3...., FLDN)
VALUES( SELECT <valore da pgm>, <valore2 da pgm>, <valore3 da pgm>,
fld1, fld2, fld3..., fldN FROM <Tabella_lavorazione>)
Sempre che la sintassi non mi sembra correttissima, diciamo che
dovrebbe essere l'equivalente utilizzando un recordset rst che punti
alla tabella tabella_lavorazione del ciclo:
WHILE NOT rst.EOF
    cnST.execute "INSERT INTO <Storico> (NEWFLD1, NEWFLD2, NEWFLD3,
FLD1, FLD2, FLD3...., FLDN) " &_
                     "VALUES(" & myval1 & "," & myval2 & "," & myval3
& "," & rst!FLD1 & "," & rst!FLD2 & "," & _
                     rst!FLD3 & "," & .... & rst!FLDN & ")"
    rst.movenext
WEND
Posso tradurre il tutto in un' unica stringa SQL?
Grazie a tutti.

 alla tabella tabella_lavorazione del ciclo:
È una semplice query di INSERT INTO, non ci va "VALUES":
INSERT INTO <storico> (NEWFLD1, NEWFLD2, NEWFLD3, FLD1, FLD2,FLD3...., FLDN)
SELECT <valore da pgm>, <valore2 da pgm>, <valore3 da pgm>,fld1, fld2, fld3...,
fldN FROM <Tabella_lavorazione>
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 Raf
Ma devo specificare tutti i campi, perché saranno più di 40... non
posso fare una cosa del tipo
 INSERT INTO <storico> (*)
 SELECT <valore da pgm>, <valore2 da pgm>, <valore3 da pgm>,* FROM
<Tabella_lavorazione>
Grazie.

 Grazie.
Scusa ma mi sa che mi sto facendo una pippa mentale... Stiamo parlando
di due server sql differenti residenti su macchine differenti, credo
di essere costretto ad utilizzare un recordset per i dati di partenza
a questo punto....
A questo punto per un fatto di leggibilità mi verrebbe forse più
comodo utilizzare due recordset e fare una
for each field in recordsetorigine
    rststorico!field!field.nome = recordsetorigine!field.nome
next
rststorico!NEWFLD1 = myval1
rststorico!NEWFLD2 = myval2
rststorico!NEWFLD3 = myval3
rststorico.add
a pate la sintassi del for each field che ho messo giù a memoria e
probabilmente va un po' cambiata, a livello di prestazioni cambia
molto da un
cnstorico.execute "INSERT INTO <tabellastorica>
(NEWFLD1,NEWFLD2,NEWFLD3,FLD1 ETC,,,)  " & _
 
"VALUES(myval1,myval2,myval3,recordsetorigine!
fld1,recordsetorigine...etc)"
entrambe dentro un ciclo che scorra il recordsetorigine...
... o magari potrei usare il for each per costruire la stringa SQL...

 <Tabella_lavorazione>
Probabilmente sě, ma cosě:
INSERT INTO <storico>
SELECT <valore da pgm>, <valore2 da pgm>, <valore3 da
pgm>,<Tabella_lavorazione>.* FROM <Tabella_lavorazione>
Se <Tabella_lavorazione> č situata in un diverso server SQL, credo che tu possa
fare un collegamento via ODBC, ad esempio (come le tabelle linkate in Access).


 tabelle linkate in Access).
In alternativa:
- usare la stored procedure sp_addlinkedserver
- utilizzare una sintassi tipo
  SELECT * FROM [servername\instancename.]pubs.dbo.<tabella_lavorazione>
-- 


Bene grazie, ora mi metto a scrivere un po' di codice... Vediamo dove
mi blocco...