Newsgroup: it.comp.software.database
Titolo: [MSSQL] Problema di aggiornamento remoto

Ho un problema che sta diventando veramente penoso. Vorrei provare a
spiegarlo sperando in qualche suggerimento perchè realmente non riesco
a venirne fuori nonostante il fatto che mi sto consumando gli occhi
sulla documentazione online nonchè un bel po' di testi. Raggiunti
limiti mentali, forse
La situazione è la seguente. In un ambiente di hosting, quindi con
scarso o nullo controllo amministrativo, ho un web server su cui
girano scripts che utilizzano un db server che sta su un' altra
macchina (diverso IP della stessa rete)
Chi deve materialmente aggiornare il db accede al sito da internet e
non ha un SQL server, quindi non può utilizzare l' enterprise manager.
Tutto quello che lui può fare è caricare un database access o un file
di altra natura via FTP in una una cartella del web server ,
eventualmente generato mediante mio procedure dal suo desktop (un csv
o qualunque altra cosa. Su questo punto ho grande libertà). I record
da aggiornare sono indicativamente 2000; indicativamente il db access
equivalente al contenuto di SQL server porta via 1,5-2 Megabytes.
Le alternative del diavolo sono le seguenti:
1) Aprire una connessione ai due database e usare oggetti ado per
trasferire i record. Inefficiente e a rischio di kill da parte del web
server se si sforano i tempi.
2) Generare via procedure su desktop una unica megaquery di
aggiornamento piena di insert, caricarla sul web server, leggerla con
uno script e, bypassando gli oggetti ado, mandarla in esecuzione come
sql dinamico. A naso mi pare solo un diverso modo di dire che non so
che pesci pigliare  e quindi immagino male.
3). far impostare un linked server che punta all' access sul server
web da cui mandare in esecuzione tutte le query che voglio. Elegante,
efficare, permette un fine controllo fine della applicazione. Peccato
che io non sappia ne riesca a farmi dire dal provider se è possibile:
non so se esista una 'stringa di connessione'  che mi permette di
linkarmi a un db access (non a un RDBMS in piena regola...) su un'
altra macchina. ovviamente stesso discorso vale per una OPENROWSET.
4) Io ho già un brillante pacchetto DTS che aggiorna l' SQL target a
partire dalla mia console. Mi chiedo se sia possibile salvare un
pacchetto DTS come file di un qualche tipo (non da compilare con
Visual basic! mentre non ci sono problemi con il VBScript) da mandare
in esecuzione sul desktop di chi deve aggiornare i dati che - ripeto -
NON dispone di SQL server. Da quello che ho visto DTSRun esegue DTS
solo in presenza di un SQL Server sul PC locale (mi sto spulciando le
700 pagine del Peterson sui DTS alla ricerca di lumi ma il buio rimane
fitto)
5) Ovviamente (credo) non posso usare Bulk Insert a partire da un file
di testo in quanto non posso caricare file di testo sul SQL server
Francamente non so cosa fare. Avete qualche idea?
Ciao a tutti
Daniele

 di testo in quanto non posso caricare file di testo sul SQL server
Perche' no ?
Bulk insert serve proprio per caricare massivamente
(tramite un API particolare) proprio file di testo
sia a lunghezza fissa, sia delimitati.
Comunque non cambia molto la questione, potrebbe essere
semplicemente un DTS package che utilizza la Bulk Transfer
task piuttosto che una stored procedure che utilizza il
comando di BULK INSERT.
La chiave sta comunque nel definire un job ed
eseguirlo in modalita' asincrona.
Ciao,
-- 
Gianluca Hotz
Backoffice MVP (SQL Server) MCP SQL Server and MCP Windows
Vice-President of the Italian User Group for SQL Server
Founding Member of the Italian User Group for .NET
http://www.ghotz.com
http://www.ugiss.org

sia a lunghezza fissa, sia delimitati.
E infatti, era una delle prime cose cui avevo pensato.
Nessuna possibilità di impostare un linked server perchè mi veda il
file  access sul web server?  Sarebbe una soluzione veramente
interessante anche per la sua generalità.
Mille grazie comunque per la risposta che mi hai già dato.  Ti sono
grato.
Ciao!
Daniele

 interessante anche per la sua generalità.
Puoi farlo, ma se passa il traffico per il linked server
(che nel caso di Access significa poter accedere al file
sul web server) allora puoi anche usare un DTS oppure
direttamente bulk copy con il file di testo.


BTW: mi sono dimenticato che c'e' anche un'altra
soluzione: puoi utilizzare SQLXML per effettuare
delle bulk insert.
SQLXML e' un'ISAPI (un modulo che estende le
funcionalita') per IIS che permette di estrarre
ed aggiornare i dati in XML via HTTP.
L'ISAPI non deve necessariamente risiedere
sulla macchina che ospita SQL Server.
Se decidi di dare un'occhiata a questa
tecnologia, tieni presente che la versione
di SQLXML ditribuita con SQL Server e' la
1.0 (molto limitata), puoi scaricare
gratuitamente la versione 3.0.
Tutta la documentazione relativa la trovi
al seguente indirizzo:
http://msdn.microsoft.com/sqlxml



http://msdn.microsoft.com/sqlxml
Sono tuti spunti e considerazioni interessanti. Grazie per il tuo
tempo e i tuoi suggerimenti.
Ciao
Daniele