Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

MS Excel - externe (SQL) Daten mit lokaler Tabelle (Blatt) verknüpfen

Mein obiger Kommentar sollte lediglich ein paar Möglichkeiten eröffnen, die Sie vielleicht zur Hand haben.

PowerQuery ist ein kostenloses Plug-In für Office 2013. In Office 2016 ist es Teil von Excel und kein Plug-In mehr.

Wie auch immer, Sie scheinen den Ansatz zu bevorzugen, eine temporäre Tabelle oder eine Tabellenvariable in Ihrem SQL zu verwenden. Daher werde ich diesen Ansatz etwas näher erläutern:

Am Ende möchten Sie eine ähnliche Abfrage wie diese:

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;

Beachten Sie die Wichtigkeit von set nocount on; am Anfang der obigen SQL-Abfrage. Ohne das geht es nicht!

Sobald Sie diese Abfrage haben, können Sie sie einfach über das Menü Data in Excel einfügen ► Get External DataFrom SQL Server . In einem ersten Schritt erhalten Sie die Kundentabelle und in einem zweiten Schritt verfeinern Sie die Abfrage um die Tabellenvariable wie oben beschrieben. Hier ist eine kurze visuelle Zusammenfassung:

Ich schätze, an diesem Punkt sind die einzigen verbleibenden Fragen:

  1. Wie erstellen Sie die obige SQL-Anweisung dynamisch und
  2. Wie erhalten Sie die obige Tabelle in Excel und aktualisieren sie dann mit dieser aktualisierten SQL-Anweisung.

Um das obige SQL dynamisch zu erstellen, sollten Sie sich Folgendes ansehen:Verwenden eines Arrays oder Wörterbuchs als from-Klausel in SQL in Excel vba

Erst gestern habe ich eine ähnliche Frage beantwortet, bei der ein Benutzer den Inhalt einer Excel-Tabelle als dynamisch erstellte Tabelle an einen SQL-Server übergeben wollte. Sie können es leicht für Ihre Zwecke anpassen (oder sogar so verwenden, wie es ist).

Für den letzten Schritt (Aktualisierung dieser Tabelle in Excel mit dieser neuen SQL-Abfrage) können Sie den Makrorekorder verwenden und das tun, was ich im obigen Screenshot getan habe. Der automatisch erstellte Code ist nicht mehr/weniger als das, was ich Ihnen vorschlagen würde.

Also, da haben Sie es. Lassen Sie mich wissen, wenn ich mich nicht klar genug ausgedrückt habe oder wenn Sie weitere Details benötigen, um diese Lösung zu verstehen.