Discussione:
Convertire Query Access in SQL Server
(troppo vecchio per rispondere)
Patrick De Angelis
2005-12-22 07:46:51 UTC
Permalink
Salve,
Avrei la necessità di un tool (meglio ancora un modulo in VBA) che converta
le query di Access in Viste/Store procedures di SQL Server.
In Pratica in input gli do una query SQL in sintassi Access (es. "SELECT
Trim(Nome) as Nominativo FROM Operatori WHERE Scadenza>=Date()") e lui mi
restituisce l'equivalente in sintassi SQL Server ("SELECT LTRIM(RTRIM(Nome))
FROM dbo.Operatori WHERE Scadenza >= GETDATE()").

Grazie!

Patrick
Andrea Benedetti
2005-12-22 08:15:13 UTC
Permalink
Salve Patrick,
Post by Patrick De Angelis
Salve,
Avrei la necessità di un tool (meglio ancora un modulo in VBA) che
converta le query di Access in Viste/Store procedures di SQL Server.
In Pratica in input gli do una query SQL in sintassi Access (es. "SELECT
Trim(Nome) as Nominativo FROM Operatori WHERE Scadenza>=Date()") e lui mi
restituisce l'equivalente in sintassi SQL Server ("SELECT
LTRIM(RTRIM(Nome)) FROM dbo.Operatori WHERE Scadenza >= GETDATE()").
Francamente non so dell'esistenza di un tool simile...
Ma, sinceramente, penso che sarebbe difficile una traduzione immediata (e
soprattutto corretta).

Preferirei (ma questo è un gusto personale oltre che un consiglio) farla a
mano ;-)
Post by Patrick De Angelis
Grazie!
Patrick
Ciao!
--
Andrea
www.absistemi.it - www.ugiss.org
Patrick De Angelis
2005-12-22 08:20:44 UTC
Permalink
Il fatto è che devo mantenere la compatibilità del programma sia verso un
database Access che verso SQL Server, e poi onestamente non mi va di
riscrivere a mano le centinaia di query di cui è composto il programma,
sarebbe veramente un lavoro ingrato! :-(

Ciao
Post by Andrea Benedetti
Salve Patrick,
Post by Patrick De Angelis
Salve,
Avrei la necessità di un tool (meglio ancora un modulo in VBA) che
converta le query di Access in Viste/Store procedures di SQL Server.
In Pratica in input gli do una query SQL in sintassi Access (es. "SELECT
Trim(Nome) as Nominativo FROM Operatori WHERE Scadenza>=Date()") e lui mi
restituisce l'equivalente in sintassi SQL Server ("SELECT
LTRIM(RTRIM(Nome)) FROM dbo.Operatori WHERE Scadenza >= GETDATE()").
Francamente non so dell'esistenza di un tool simile...
Ma, sinceramente, penso che sarebbe difficile una traduzione immediata (e
soprattutto corretta).
Preferirei (ma questo è un gusto personale oltre che un consiglio) farla a
mano ;-)
Post by Patrick De Angelis
Grazie!
Patrick
Ciao!
--
Andrea
www.absistemi.it - www.ugiss.org
Andrea Benedetti
2005-12-22 08:36:35 UTC
Permalink
Salve Patrick,
Post by Patrick De Angelis
Il fatto è che devo mantenere la compatibilità del programma sia verso un
database Access che verso SQL Server, e poi onestamente non mi va di
riscrivere a mano le centinaia di query di cui è composto il programma,
sarebbe veramente un lavoro ingrato! :-(
Capisco il tuo problema...
E' anche vero che dovresti comunque controllare tutte le tue viste / stored
procedure create automaticamente per verificare che siano state costruite
correttamente e che si comportino come devono.
Di fatto il lavoro "ingrato" andrebbe fatto più o meno allo stesso modo...
;-)

Aspettiamo smentite (ovvero se qualcuno conosce un tool come quello che
chiedi)
Post by Patrick De Angelis
Ciao
Ciao!
--
Andrea
www.absistemi.it - www.ugiss.org
Marcello
2005-12-22 17:54:34 UTC
Permalink
Post by Patrick De Angelis
Il fatto è che devo mantenere la compatibilità del programma sia verso un
database Access che verso SQL Server, e poi onestamente non mi va di
riscrivere a mano le centinaia di query di cui è composto il programma,
sarebbe veramente un lavoro ingrato! :-(
Ciao, la questione della portabilità di un DB è una questione molto
complessa che non è certo liquidata da un tool di migrazione.

L'unico modo serio per creare un database portabile sui motori x,y,z è
quello di scrivere query in un linguaggio comune a x,y,z e di sfruttare
esclusivamente strumenti disponibili sia in x che in y che in z e questo
fatto in generale riduce enormemente le potenzialita sia di x che di y
che di z.
Insomma, il risultato finale è un db "debole" sotto ogni motore.

Detto ciò il porting da Access a SQL non è difficilissimo e, evitando
tool che fanno pasticci, la cosa più semplice è andare a correggere le
piccole differenze di sintassi tra uno e l'altro a mano [una replace di
"trim(" con "ltrim(rtrim(" richiede 5 secondi]

Tutto ciò naturalmente è frutto solo della mia esperienza e del mio
gusto, mi accodo a Andrea in attesa di smentite.

marc.
Patrick De Angelis
2005-12-23 14:06:03 UTC
Permalink
Il fatto è che, come detto, che il programma deve rimanere compatibile con
Db Access, per cui non posso "sostituire", ma semmai integrare. Quindi per
ogni query nel database, per ogni query costruite nei moduli (spesso le
query sono dinamiche), dovrei fare una versione per Access e una per SQL
server, parliamo di oltre 400 query!
Penso però che debba esistere da qualche parte un moduletto in VBA con una
funzione alla quale gli passi la query scritta in sintatti Access e te la
restituisce in sintassi SQL Server, anche perchè le differenze sono diverse,
ma sono tutte abbastanza "lineari".

Le differenze, però, non sono così poche come sembra. Certo dipende dalla
complessità delle query di origine.
Post by Marcello
Post by Patrick De Angelis
Il fatto è che devo mantenere la compatibilità del programma sia verso un
database Access che verso SQL Server, e poi onestamente non mi va di
riscrivere a mano le centinaia di query di cui è composto il programma,
sarebbe veramente un lavoro ingrato! :-(
Ciao, la questione della portabilità di un DB è una questione molto
complessa che non è certo liquidata da un tool di migrazione.
L'unico modo serio per creare un database portabile sui motori x,y,z è
quello di scrivere query in un linguaggio comune a x,y,z e di sfruttare
esclusivamente strumenti disponibili sia in x che in y che in z e questo
fatto in generale riduce enormemente le potenzialita sia di x che di y che
di z.
Insomma, il risultato finale è un db "debole" sotto ogni motore.
Detto ciò il porting da Access a SQL non è difficilissimo e, evitando tool
che fanno pasticci, la cosa più semplice è andare a correggere le piccole
differenze di sintassi tra uno e l'altro a mano [una replace di "trim("
con "ltrim(rtrim(" richiede 5 secondi]
Tutto ciò naturalmente è frutto solo della mia esperienza e del mio gusto,
mi accodo a Andrea in attesa di smentite.
marc.
Lorenzo Benaglia
2005-12-23 14:14:33 UTC
Permalink
Post by Patrick De Angelis
Penso però che debba esistere da qualche parte un moduletto in VBA
con una funzione alla quale gli passi la query scritta in sintatti
Access e te la restituisce in sintassi SQL Server, anche perchè le
differenze sono diverse, ma sono tutte abbastanza "lineari".
Patrick, credimi, quel moduletto non esiste.
Post by Patrick De Angelis
Le differenze, però, non sono così poche come sembra. Certo dipende
dalla complessità delle query di origine.
Appunto, il mio consiglio è quello di tradurre manualmente le tue query
Access nelle corrispettive viste, stored procedures o funzioni table-valued
di SQL Server.

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