[SQL Server 2005] Openrowset, insert di sole righe nuove da Excel al D...

giovedì 19 novembre 2009 - 11.39

Anonimo Profilo | Senior Member

Salve a tutti.
Ho il seguente problema: devo fare, su una tabella di Sql Server 2005, una insert che fa riferimento a dei dati su un file .xls (Excel). Fin qui tutto ok, ma dovrei selezionare solo quei dati che non sono presenti sul DB, altrimenti avrei righe di dati sul DB uguali.
Ecco la query che mi permette di selezionare tutte le righe del file .xls:

INSERT INTO Commessa (Numerodoc, Cod_Arca) SELECT Colonna_TS, Cod_ARCA FROM
OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\folder\filename.xls', [Foglio1$])

Per fare la selezione delle righe nuove del file .xls anziché tutte come faccio? O almeno quelle righe non presenti sul DB?
Spero di essermi spiegato bene.
Grazie in anticipo.

lbenaglia Profilo | Guru

>Per fare la selezione delle righe nuove del file .xls anziché
>tutte come faccio? O almeno quelle righe non presenti sul DB?

Ciao Allan Felipe,

Supponendo che la Primary Key della tabella dbo.Commessa sia costituita dalla colonna Numerodoc potresti utilizzare la keyword NOT EXISTS come nel seguente esempio:

INSERT INTO dbo.Commessa (Numerodoc, Cod_Arca) SELECT Colonna_TS, Cod_ARCA FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\folder\filename.xls', [Foglio1$]) WHERE NOT EXISTS( SELECT * FROM dbo.Commessa WHERE Numerodoc = Colonna_TS );

Nel caso sia costituita anche dalla colonna Cod_Arca aggiungi una condizione in AND nella clausola WHERE

>Grazie in anticipo.
Prego.

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

Anonimo Profilo | Senior Member

Funziona ma fino ad un certo punto, cioè:
Utilizzando questo metodo su SQL Server va bene.
Utilizzandolo poi all'interno del codice di un bottone del sito (in asp.net - c#) in debug con Visual Studio funziona anche.
Ma dopo il sito pubblicato cliccando su questo bottone mi restituisce il seguente errore:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Comunque non c'è una chiave primaria, al momento.

lbenaglia Profilo | Guru

>Ma dopo il sito pubblicato cliccando su questo bottone mi restituisce
>il seguente errore:
>
>[SqlException (0x80131904): Impossibile inizializzare l'oggetto
>origine dei dati del provider OLE DB "Microsoft.Jet.OLEDB.4.0"
>per il server collegato "(null)".
>Il provider OLE DB "Microsoft.Jet.OLEDB.4.0" per il server collegato
>"(null)" ha restituito il messaggio "Errore non specificato.".]
Messaggio chiarissimo
Il file Excel si trova sul server, vero?

>Comunque non c'è una chiave primaria, al momento.
Male

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

Anonimo Profilo | Senior Member

Sì, ma anche se si trova sul pc locale, fa questo lavoro. Ecco perchè mi sembrava strano.

lbenaglia Profilo | Guru

>Sì, ma anche se si trova sul pc locale, fa questo lavoro. Ecco
>perchè mi sembrava strano.
Occhio che la query viene sempre eseguita sul server che ospita l'istanza, pertanto il documento Excel deve risiedere lì.
Ti suggerisco di postare il quesito sul forum dedicato ad ASP.NET.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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