PDA

View Full Version : [SQL2000] Problema strano con filtro di una query


Bizkaiko
16-10-2009, 11:22
Ciao,sto lavorando su delle query su SQL2000, ma mi succede una cosa strana:
io ho 2 tabelle uguali (COMUNI) in 2 database distinti, e devo copiare i record di una tabella nell'altra ovviamente controllando che non si creino duplicati...
La tabella è strutturata con ID, NomeComune, tutti-gli-altri-dati, ed il confronto lo posso fare solo sul campo NomeComune.
Nella tabella di destinazione ho aggiunto un campo IdOrig: faccio partire una prima query che mi trova i campi corrispondenti, e nella tabella di destinazione mi aggiorna questo campo IdOrig mettendo il valore dell'ID che c'è nella tabella di partenza.
La seconda query è quella di inserimento delle righe della tabella di partenza il cui ID non compare in questa colonna IDOrig.

La cosa strana è questa:
TabellaDiPartenza [ID - NomeComune]:
1 - Milano
2 - Roma
Tabella di destinazione [ID - IdOrig - NomeComune]::
1 - NULL - Milano
quando faccio partire la prima query mi diventa correttamente
1 - 1 - Milano

MA, quando provo a lanciare la query:
SELECT ID, NomeComune FROM DATABASE1.dbo.COMUNI WHERE (ID NOT IN (SELECT IdOrig FROM A_COMUNI AS A_COMUNI_1))
non mi trova nulla, mentre se metto il filtro inverso, ovvero:
SELECT ID, NomeComune FROM DATABASE1.dbo.COMUNI WHERE (ID IN (SELECT IdOrig FROM A_COMUNI AS A_COMUNI_1))
mi restituisce correttamente la riga corrispondente a Milano

(e ovviamente se tolgo completamente il filtro mi vede tutte e 2 le righe del database di partenza...)

Cosa può essere?

gugoXX
17-10-2009, 11:38
Ciao,sto lavorando su delle query su SQL2000, ma mi succede una cosa strana:
io ho 2 tabelle uguali (COMUNI) in 2 database distinti, e devo copiare i record di una tabella nell'altra ovviamente controllando che non si creino duplicati...
La tabella è strutturata con ID, NomeComune, tutti-gli-altri-dati, ed il confronto lo posso fare solo sul campo NomeComune.
Nella tabella di destinazione ho aggiunto un campo IdOrig: faccio partire una prima query che mi trova i campi corrispondenti, e nella tabella di destinazione mi aggiorna questo campo IdOrig mettendo il valore dell'ID che c'è nella tabella di partenza.
La seconda query è quella di inserimento delle righe della tabella di partenza il cui ID non compare in questa colonna IDOrig.

La cosa strana è questa:
TabellaDiPartenza [ID - NomeComune]:
1 - Milano
2 - Roma
Tabella di destinazione [ID - IdOrig - NomeComune]::
1 - NULL - Milano
quando faccio partire la prima query mi diventa correttamente
1 - 1 - Milano

MA, quando provo a lanciare la query:
SELECT ID, NomeComune FROM DATABASE1.dbo.COMUNI WHERE (ID NOT IN (SELECT IdOrig FROM A_COMUNI AS A_COMUNI_1))
non mi trova nulla, mentre se metto il filtro inverso, ovvero:
SELECT ID, NomeComune FROM DATABASE1.dbo.COMUNI WHERE (ID IN (SELECT IdOrig FROM A_COMUNI AS A_COMUNI_1))
mi restituisce correttamente la riga corrispondente a Milano

(e ovviamente se tolgo completamente il filtro mi vede tutte e 2 le righe del database di partenza...)

Cosa può essere?

Che hai gia' fatto l'update sulla colonna idOrig, e quindi giustamente Milano dal database remoto non te lo deve piu' restituire con la prima e te lo deve restituire con la seconda?

Poi in realta' per capire meglio dovresti circoscrivere un po' meglio il problema, ovvero dire
- quale e' la tabella locale, come si chiama
- quale e' la tabella remota, come si chiama,
- se stai facendo insert in locale leggendo da remoto o insert in remoto leggendo da locale
- le query per l'update e la query per l'insert

Bizkaiko
19-10-2009, 10:11
Ho risolto con il NOT EXISTS, se a qualcuno può servire è:
SELECT ID, Comune... FROM TabellaOrigine WHERE (NOT EXISTS (SELECT ID FROM TabellaOrigine WHERE (IdOrig=TabellaDest.ID)))