Il mio commento sopra aveva semplicemente lo scopo di aprire alcune possibilità che potresti avere a portata di mano.
PowerQuery è un plug-in gratuito per Office 2013. In Office 2016 fa parte di Excel e non è più un plug-in.
Ad ogni modo, sembri preferire l'approccio per utilizzare una tabella temporanea o una variabile di tabella sul tuo SQL. Quindi, elaborerò un po' di più su questo approccio:
Alla fine vorrai una query simile a questa:
set nocount on;
declare @tblVAT table
(
Country nvarchar(50),
VAT decimal(9, 7)
);
insert into @tblVAT
(Country, VAT)
values (N'Germany', 0.19),
(N'Frence', 0.20),
(N'Spain', 0.21);
select tc.Name,
tc.ID,
case when tc.Country is null then tv.Country
else tc.Country
end as Country,
tv.VAT
from dbo.tblCustomers as tc
full outer join @tblVAT as tv
on tv.Country = tc.Country;
Nota l'importanza di set nocount on;
all'inizio della query SQL precedente. Senza quello non funzionerà!
Una volta che hai questa query, puoi semplicemente incollarla in Excel usando il menu Data
► Get External Data
► From SQL Server
. In un primo passaggio otterrai la tabella del cliente e quindi in un secondo passaggio raffinerai la query per includere la variabile della tabella come descritto sopra. Ecco un breve riepilogo visivo:
Immagino che a questo punto le uniche domande rimaste siano:
- Come si crea dinamicamente l'istruzione SQL sopra e
- come si ottiene la tabella sopra in Excel e poi aggiornata con questa istruzione SQL aggiornata.
Per creare dinamicamente l'SQL sopra riportato potresti voler dare un'occhiata a quanto segue:Utilizzo di un array o di un dizionario come da clausola in sql in excel vba
Proprio ieri ho risposto a una domanda simile in cui un utente voleva passare il contenuto di un foglio Excel come tabella creata dinamicamente a un server SQL. Puoi facilmente adattarlo (o persino usarlo così com'è) per il tuo scopo.
Per l'ultimo passaggio (aggiorna questa tabella in Excel con questa nuova query SQL) puoi utilizzare il registratore di macro e fare ciò che ho fatto nello screenshot sopra. Il codice creato automaticamente non è altro/meno quello che ti proporrei.
Così il gioco è fatto. Fammi sapere se non sono stato abbastanza chiaro o se hai bisogno di ulteriori dettagli per capire questa soluzione.