none
Excel 2010 - Microsoft Query - Troz richtigem SQL Code keine Ausgabe RRS feed

  • Frage

  • Guten Tag,

    ich habe ein komisches Problem. Ich habe einen SQL
    Express Server 2012 am laufen und erstelle mit öffters in Excel über "Daten" -
    "Aus anderen Quellen" - "Microsoft Query" Abfragen aus der Datenbank.



    Sonst habe ich den einfachen Kerncode genommen: sprich Select ...
    from ... where ... order by etc.

    Jetzt möchte ich aber sehr gerne eine
    Verzweigung haben:

    declare @Kwoche_n int;

    declare @Kriterium_Jahr int;

    set @KWoche_n =
    (DATEPART(ISOWK,getdate()+7)) ;


    if @Kwoche_n = 1
    set
    @Kriterium_Jahr = year(current_timestamp)+1;
    else
    set @Kriterium_Jahr=
    year(current_timestamp);

    SELECT ...

    FROM DB_...dbo.... ...


    where jahr=@Kriterium_Jahr And
    KW= @Kwoche_n
    group by
    [Abteilung]



    Wenn ich nur den Kern, also das Select versuche,
    bekomme ich ganz normal die Werte. Auch mit declare werden mir ganz normal die
    Werte angezeit. Sobald ich das set @k_Woche auskommentiere, bekomme ich keine
    Ausgabe mehr der Werte.


    In der Tabelle wird nur folgendes angezeigt:

    Abfrage von DB_Tabelle_x.f_1


    Leider weiß ich nicht weiter. Den code habe ich schon auf dem Server
    getestet und er liefert dort die gewünschte Ausgabe.
    Beim Erstellen der
    Query kann man ja auch den SQL Text bearbeiten unter "Daten in Microsoft Query
    bearbeiten oder ansehen". Der Code wird mit in dem Menü auch ganz normal
    ausgewertet und die gewünsten Werte werden mir angezeigt.

    Weiß einer von
    euch, warum mir die Ausgabe des Codes nicht geliefert wird ?

    Fakten:

    MS Office 2010

    SQL Server 2012 Express

    Lieben Gruß, Desby Doll

    Freitag, 14. Juni 2013 06:23

Alle Antworten

  • Sobald ich das set @k_Woche auskommentiere, bekomme ich keine
    Ausgabe mehr der Werte.

    Hallo Desby,

    wenn Du die SET Anweisung auskommentierst, hat die Variable @k_Woche_n den Wert NULL und ein Vergleich mit = NULL liefert nie ein Ergebnis.

    Wenn Du als Ergebnis alle Datensätze haben willst, wo das Feld KW NULL Werte enthält, musst Du den IS NULL Vergleich verwenden

    SELECT ... 
    FROM DB_...dbo.... ... 
    where jahr=@Kriterium_Jahr
          AND KW IS NULL
    group by 
    [Abteilung]


    Olaf Helper

    Blog Xing


    Freitag, 14. Juni 2013 06:37
  • Hallo Olaf,

    leider hatte ich das Problem nicht richtig beschrieben :

    Also bei diesem Text bekomme ich eine Ausgabe:


    declare @Kwoche_n int;

    declare @Kriterium_Jahr int;




    SELECT ...

    FROM DB_...dbo.... ...
    group by
    [Abteilung]

    Bei diesem nicht:


    declare @Kwoche_n int;

    declare @Kriterium_Jahr int;

    set @KWoche_n =
    (DATEPART(ISOWK,getdate()+7)) ;


    if @Kwoche_n = 1
    set
    @Kriterium_Jahr = year(current_timestamp)+1;
    else
    set @Kriterium_Jahr=
    year(current_timestamp);

    SELECT ...

    FROM DB_...dbo.... ...


    where jahr=@Kriterium_Jahr And
    KW= @Kwoche_n
    group by
    [Abteilung]

    Ich habe natürlich, als ich die Zuweisung des Wertes an die Variable zum Kommentar hinzugefügt habe, das Where Kriterium auch als Kommentar gesetzt.

    Es geht darum, wenn ich den Code mit den Variablen und natürlich dem set auf dem Server als Abfrage teste, dass ich eine normale, wie gewünschte ausgabe erhalte. Wenn ich den Code jedoch bei Excel 2010 beim MS Query hinzufüge, dass er mir keine Ausgabe liefert, bzw. Ausgabe von DB Tabelle xxx

    Allein mit dem declare führt Excel den Code normal aus, wenn ich jedoch das set dem Code hinzufüge,l geht es wieder nicht und er zeigt mir den oben genannten Text an.

    LG, Desby D

    Freitag, 14. Juni 2013 06:54
  • dass er mir keine Ausgabe liefert, bzw. Ausgabe von DB Tabelle xxx

    Es ist weiter alles ganz normal und das es "so" aussieht, also nur "Ausgabe von ..." liegt daran, das Deine Abfrage kein Ergebnis liefert.

    Und grundsätzlich funktioniert so eine Abfrage auch mit MS Query + Excel:


    Olaf Helper

    Blog Xing

    Freitag, 14. Juni 2013 07:06
  • Hallo,

    danke für die schnelle Antwort. Genau da habe ich auch den Code eingetragen und er hat mir bei dem "Abfrage von Test" auch die Ausgabe angezeigt (waren ein paar Datensätze, die passen)

    Wenn ich jetzt aber diese Abfrage schließe, um die Werte in Excel anzeigen zu lassen, wir ein einer Zelle nur "Abfrage von DB_Abfragename" angezeigt. Da mir ja vorher die Werte angezeigt wurden, gibt es ja definitiv Datensätze die dem Kriterium entstprechen.

    Wenn ich nur

    declare @test int;

    set @test = 3;

    select @test;

    wähle, wird mir auch keine Ausgabe in Excel gegeben. In dem Fenster davor (siehe Abbildung von Ihnen) wurde mir jedoch der passende Wert geliefert.

    Freitag, 14. Juni 2013 07:11
  • Ach so, in Excel selbst wird Dir kein Ergebnis angezeigt, das hatte ich irgendwie nicht rausgelesen.

    Excel zeigt nur das erste Ergebnisset an und das ist die InfoMessage der Set Anweisung, und das ist ein leeres Ergebnis. Das kannst Du mit der SET NOCOUNT ON Anweisung unterbinden, dann bekommst Du auch was in Excel selbst zu sehen.

    SET NOCOUNT ON;
    DECLARE @var int;
    
    SET @var = (DATEPART(WK,getdate()+7)) ; 
    
    IF @var = 1
        SELECT 'Var ist 1' AS Ergebnis
    ELSE
        SELECT 'Var ist nicht 1' AS Ergebnis


    Olaf Helper

    Blog Xing

    • Als Antwort vorgeschlagen Elmar Boye Freitag, 14. Juni 2013 08:38
    Freitag, 14. Juni 2013 07:39
  • Entschuldige, ich habe mich nicht klar genug Ausgedrückt.

    Mit

    SET NO COUNT ON;

    funktioniert alles super, vielen vielen Dank!

    Ich wünsche einen schönen Tag,

    Desby D

    Freitag, 14. Juni 2013 07:46
  • Das üblich: Kleine Ursache, große Wirkung, hier halt der Text "(1 row(s) affected)", den man in SSMS unter dem Kartenreiter "Messages" sieht und mit dem Excel nichts anzufangen weiß.

    Olaf Helper

    Blog Xing

    Freitag, 14. Juni 2013 07:50