Errore: la colonna xxx non appartiene alla tabella YYY

giovedì 03 luglio 2008 - 15.19

toyo86 Profilo | Junior Member

salve a tutti..ho un problema.
sto scrivendo un programmino per la tesi che mi prenda dei valori presenti da un database Access e li porti su Sql Server per poi produrre delle statistiche. So che esiste una procedura manuale (il wizard) ma io ho bisgna di qualcosa di automatico da eseguire schedulato settimanalmente..

sto cercando di fare degli esempi di procedura che produce un dataset a partire da una query collegandosi ad access..ma ho un problema: non mi viene riconosciuta una colonna (tra l'altro la chiave) di una tabella..il bello è che provando con un altra tabella del mio database funziona tutto senza problemi..allego il codice..
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


la riga segnata è quella che mi da il problema..ma nella mia tabella che si chiama ANAGRAFICA la prima colonna ha come nome 'codice anagrafico' (staccato e senza underscore o altro..c'è uno spazio fra le due parole....)


grazie a chi mi può aiutare...

lbenaglia Profilo | Guru

>sto scrivendo un programmino per la tesi che mi prenda dei valori
>presenti da un database Access e li porti su Sql Server per poi
>produrre delle statistiche. So che esiste una procedura manuale
>(il wizard) ma io ho bisgna di qualcosa di automatico da eseguire
>schedulato settimanalmente..
Perché non definisci un linked server al file .mdb e scheduli l'importazione dei dati con un semplice job?
Sui Books Online troverai tutti i dettagli.

>grazie a chi mi può aiutare...
Prego.

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

toyo86 Profilo | Junior Member

una domanda...visto che non avevo mai sentito parlare di linked server (ci sono troppe funzionalità nel mondo .net & friends.. e ogni giorno ne scopro una nuova...)..ho una domanda..ma posso importare anche solo certi dati (non devo aggiornare tutte le tabelle ma solo alcuni campi, cioè in qsl server ho tabelle con meno attributi, che sono quelli che mi servono per produrre le statistiche...) da un sottoinsieme ridotto di tabelle?
grazie ancora...

lbenaglia Profilo | Guru

>una domanda...visto che non avevo mai sentito parlare di linked
>server (ci sono troppe funzionalità nel mondo .net & friends..
>e ogni giorno ne scopro una nuova...)
Infatti i Linked Server non hanno niente a che vedere con ".net & friends" dato che sono una funzionalità di SQL Server
http://msdn.microsoft.com/en-us/library/ms188279.aspx

Guarda l'esempio B:
http://msdn.microsoft.com/en-us/library/ms190479.aspx

>..ho una domanda..ma
>posso importare anche solo certi dati (non devo aggiornare tutte
>le tabelle ma solo alcuni campi, cioè in qsl server ho tabelle
>con meno attributi, che sono quelli che mi servono per produrre
>le statistiche...) da un sottoinsieme ridotto di tabelle?
Ma certo. Un Linked Server non è altro che una registrazione ad una fonte dati esterna a SQL Server.
Una volta definito potrai interrogare il tuo file .mdb direttamente da SQL Server, referenziando singolarmente le tabelle che ti interessa importare, utilizzando una banale INSERT...SELECT.

>grazie ancora...
Prego.

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

toyo86 Profilo | Junior Member

grazie mille...comincio le letture!!

lbenaglia Profilo | Guru

Continuiamo in questo thread:

> non riesco a capire come sia possibile attivare ed utilizzare un linked server..
> devo creare un progetto VS?
No.

>oppure devo avere qualche versione speciale di sql?
No.

>o attivare qualcosa? scusami il disturbo..ma proprio non capisco..
Devi semplicemente definire il linked server da SQL Server Management Studio (Server Objects > Linked Servers) oppure eseguendo la stored procedure sp_addlinkedserver (esattamente come nell'esempio B che ti ho segnalato).

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

toyo86 Profilo | Junior Member

allora..
sono entrato in sql server managment studio..
oggetti server->server collegati-> e ne ho aggiunto uno a cui ho dato un nome...
adesso se non ho capito male posso usare nome_linked_server.tabelle... nelle mie query?

però ho un altro problema..se clicco con il mouse sul mio linked server che ho chiamato ACCESS perchè non ho la possibilità di fare crea Select, Update... ma solo CREATE e DROP?

è un mondo nuovissimo per me..credo si capisca..

lbenaglia Profilo | Guru

>adesso se non ho capito male posso usare nome_linked_server.tabelle...
>nelle mie query?
Non proprio, dovrai utilizzare il four-part name in questo modo: nome_linked_server...tabelle

>però ho un altro problema..se clicco con il mouse sul mio linked
>server che ho chiamato ACCESS perchè non ho la possibilità di
>fare crea Select, Update... ma solo INSERT e DROP?
Da dove?
Puoi scrivere ed eseguire ogni comando DML.

>è un mondo nuovissimo per me..credo si capisca..


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

toyo86 Profilo | Junior Member

>adesso se non ho capito male posso usare nome_linked_server.tabelle...
>nelle mie query?
Non proprio, dovrai utilizzare il four-part name in questo modo: nome_linked_server...tabelle

>però ho un altro problema..se clicco con il mouse sul mio linked
>server che ho chiamato ACCESS perchè non ho la possibilità di
>fare crea Select, Update... ma solo INSERT e DROP?
Da dove?
Puoi scrivere ed eseguire ogni comando DML.

da sql server managment studio..cliccando sul server collegato..credevo di poter fare query da la..adesso mi informo e magari domani riprovo con calma e a mente lucida..

lbenaglia Profilo | Guru

>da sql server managment studio..cliccando sul server collegato..credevo
>di poter fare query da la..adesso mi informo e magari domani
>riprovo con calma e a mente lucida..
No, collegati all'istanza sulla quale hai definito il Linked Server, New Query e digita un normale comando di SELECT:

SELECT col1, ..., col_n FROM nome_linked_server...tabella WHERE...;

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

toyo86 Profilo | Junior Member

ultima cosa...mi spieghi un attimo il four part name?
devo mettere nome_linked_server.cosa?

nel mio caso si chiama ACCESS e una tabella ad esempio che voglio vedere è ANAGRAFICA

SELECT * FROM ACCESS.ANAGRAFICA
??

lbenaglia Profilo | Guru

>ultima cosa...mi spieghi un attimo il four part name?
server.database.schema.oggetto, ma dato che access non ha i concetti di database e schema, semplicemente vanno omessi, rispettando però la posizione.

>devo mettere nome_linked_server.cosa?
>
>nel mio caso si chiama ACCESS e una tabella ad esempio che voglio
>vedere è ANAGRAFICA
>
>SELECT * FROM ACCESS.ANAGRAFICA ??

SELECT * FROM ACCESS...ANAGRAFICA;

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

toyo86 Profilo | Junior Member

ok adesso ho capito..però ho ancora qualche problema..
provo a spiegarmi..
se voglio prendere i miei dati dal linked server ACCESS e avessi una tabella che si chiama XX YY (xx spazio y)
mi da qualche problema....

ho provato a scrivere del codice cosi..

INSERT INTO XX YY VALUES (SELECT * FROM ACCESS...XX YY)

e

INSERT INTO XX YY (SELECT * FROM ACCESS...XX YY)

Non capisco proprio perchè non funzioni..e soprattutto immagino che il problema sia dovuto allo spazio fra i nomi..visto che molte tabelle Access da cui devo importare i dati hanno spazi nel loro nome..come devo comportarmi?grazie..

lbenaglia Profilo | Guru

>Non capisco proprio perchè non funzioni..
Perché lo spazio non fa parte degli identificatori regolari.
Racchiudi tra parentesi quadre il nome della tabella: [XX YY].

>grazie..
Prego.

Ciao!

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

toyo86 Profilo | Junior Member

allora...io ho provato ad eseguire questa query...

INSERT INTO [dbo.ZZZZ] SELECT * FROM ACCESS...[XX YY]

dove ZZZZ ha la stessa struttura di XX YY
ma non mi funziona..ho provato anche a mettere ZZZZ al posto di dbo.ZZZZ ma niente..
in questo caso
INSERT INTO [dbo.ZZZZ] SELECT * FROM ACCESS...[XX YY]
l'errore è il nome oggetto dbo.ZZZZ non è valido

nell'altro caso:
INSERT INTO [ZZZZ] SELECT * FROM ACCESS...[XX YY]
mi da "il nome di oggetto ZZZZ non è valido"

poi ho provato a fare una
INSERT INTO ZZZZ VALUES (SELECT * FROM [XX YY])
e
INSERT INTO ZZZ VALUES SELECT * FROM [XX YY]

niente ancora...non capisco dove sto sbagliando...

lbenaglia Profilo | Guru

>allora...io ho provato ad eseguire questa query...
>
>INSERT INTO [dbo.ZZZZ] SELECT * FROM ACCESS...[XX YY]
Se ZZZZ non utilizza caratteri irregolari non è necessario racchiuderla tra parentesi quadre.
Inoltre è sbagliato scrivere [dbo.ZZZZ], al più dovresti utilizzare [dbo].[ZZZZ].

>niente ancora...non capisco dove sto sbagliando...
Nemmeno io.
Perché non posti i veri nomi delle tabelle ed i relativi schema?

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

toyo86 Profilo | Junior Member

ho riprovato...adesso funziona..una cosa..come faccio a fare eseguire una query in una specifica tabella?nel senso..
se io ho questa query
INSERT INTO MARCHE SELECT * FROM ACCESS...MARCHE
se faccio esegui direttamente dall'editor di query non funziona..se clicco sulla tabella vuota e faccio esegui query allora me la riempie..
il mio dubbio sta su come fare a far eseguire la query alla tabella giusta...

e poi tornando alla richiesta del primo post...
per schedulare ad esempio settimanalmente o giornalmente il fatto di aggiornare tramite query le mie tabelle da sql server con i dati presi dal linked server Access...qualcuno ha qualche idea?

lbenaglia Profilo | Guru

>se io ho questa query
>INSERT INTO MARCHE SELECT * FROM ACCESS...MARCHE
>se faccio esegui direttamente dall'editor di query non funziona..se
>clicco sulla tabella vuota e faccio esegui query allora me la
>riempie..
Non ho capito.

>e poi tornando alla richiesta del primo post...
>per schedulare ad esempio settimanalmente o giornalmente il fatto
>di aggiornare tramite query le mie tabelle da sql server con
>i dati presi dal linked server Access...qualcuno ha qualche idea?
Definisci un Job nel SQL Server Agent.
Ogni dettaglio sui Books Online.

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

toyo86 Profilo | Junior Member

allora..cerco di spiegarmi meglio...
ho scritto la querydell'esempio sopra (che ha in nomi come nel mio db )
praticamente se facevo subito eegui query mi diceva query eseguita ma nessun valora veniva inserito..se invece cliccavo sulla tabella marche e facevo esegui query allora si aggiornava con i dati..il mio dubbio è..come faccio a farla eseguire in modo automatico se io ho trovato solo il modo cliccandoci sopra ?

lbenaglia Profilo | Guru

>praticamente se facevo subito eegui query mi diceva query eseguita
>ma nessun valora veniva inserito..se invece cliccavo sulla tabella
>marche e facevo esegui query allora si aggiornava con i dati..
Ma sei sicuro di aver selezionato il db corretto?!
Dato che la tabella di destinazione è indicata nel comando di INSERT non devi fare click da nessuna parte.
L'unica cosa che devi verificare è di aver selezionato db di destinazione corretto.

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

toyo86 Profilo | Junior Member

provando e cercando anche altre informazioni sul sito microsoft ho capito abbastanza..grazie mille..se ho ancora problemi mi affiderò ancora in questo magnifico forum...grazie ancora..adesso funziona..

pero ora ho un piccolo problema...
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

non capisco perchè..soprattutto perchè sto provando le stesse operazioni su due pc diversi..su uno funziona e sull'altro no...
su uno uso sql server e sull'altro la versione express..
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