Announcement

Collapse
No announcement yet.

SQL-Skript lässt sich nicht per Batch ausführen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL-Skript lässt sich nicht per Batch ausführen

    Hallo Entwickler-Forum,

    ich verwende MS SQL 2005 Express und habe damit das Problem, dass ich eine Abfrage zwar aus dem Management Studio heraus durchführen kann, aber dies funktioniert nicht per Batch Datei.
    Die Batch soll eigentlich mal als Windows-Task laufen und alle 5 Minuten eine Datenbank aktualisieren.

    Teile meiner Abfrage:

    GO
    EXEC sp_addlinkedserver 'SRV01', N'SQL SERVER';
    EXEC sp_addlinkedsrvlogin 'SRV01\INSTANCE', 'FALSE','sa', 'login', 'XXXXX';

    GO
    insert into "MY_PC\SQLEXPRESS".DB1.dbo.Data
    select
    Replace(VarName, 'PEW PED\', ''),
    VarValue,
    dateadd(day, -2, convert(datetime, convert(float,Time_ms/1000000)))
    from "SRV01\INSTANCE".master.dbo.Data0
    where dateadd(day, -2,convert(datetime, convert(float, Time_ms/1000000))) >
    (select MAX(Date) from "MY_PC\SQLEXPRESS".DB1.dbo.Data)
    And Validity = 1;

    GO
    EXEC sp_dropserver 'SRV01\INSTANCE', 'droplogins';

    Ich hoffe mal, dass die Abfrage nicht all zu stümperhaft ausschaut.

    Im nächsten Schritt rufe ich obiges Skript mit:
    osql -U sa -P XXXXX -S MY_PC\SQLEXPRESS -i bat-test.sql
    auf.

    Die Verbindung und auch eine Abfrage mit "select * from sys.servers" funktioniert bestens, aber seltsamerweise wird mir in der Konsole ein Syntax-Fehler in der Nähe der Serverbezeichnungen gemeldet, obwohl sich das Skript fehlerfrei aus dem Management Studio ausführen lässt.

    LG Ninnazu

  • #2
    Hallo Ninnazu,

    GO ist kein T-SQL Befehl, sondern wird nur vom Managementstudio / Query Analyzer als Anweisung interpretiert; und selbst das ist noch User-bezogen, es kann unter
    Extras => Optionen
    Abfrageausführung=>SQL Server=>Allgemein => "Batchtrennzeichen"
    konfiguriert werden; der Batchtrenner könnte also statt GO auch "Rülps" heissen (fand ich so für mich passend).

    OSQL oder SqlCmd können damit nichts anfangen und werfen entsprechend einen Fehler.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Gut zu wissen, Danke.

      Aber das bringt mich bei der Ausführung per osql nicht unbedingt weiter.
      Wenn ich die GO-Anweisungen komplett aus dem Skript rausnehme, sehe ich bei der Ausführung von "osql" weiterhin dieselben Fehler.

      Comment


      • #4
        In einem habe ich mich geirrt: SqlCmd unterstützt doch das GO:
        http://entwickler-forum.de/showpost....53&postcount=2
        http://entwickler-forum.de/showthrea...ght=osql+batch
        Damit schon ausprobiert.

        Lässt sich so erst mal schwer nachvollziehen, woran es liegen könnte.
        Wie lautet genau die Fehlermeldung?
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          So schaut das aus:

          1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> Meldung '102', Ebene '15', Status '1', Server 'MY_PC\SQLEXPRESS', Zeile 13
          Falsche Syntax in der N„he von 'SRV01\INSTANCE'.
          Meldung '156', Ebene '15', Status '1', Server 'MY_PC\SQLEXPRESS', Zeile 17
          Falsche Syntax in der N„he des 'And'-Schlsselwortes.

          Laut MSDN sind das alles vom User verursachte Fehler, komischerweise funktioniert die Abfrage im Management Studio wunderbar, nur per "osql" nicht.


          Vielen Dank, das du dir Zeit für mein Problem nimmst!

          Comment


          • #6
            Ok, alles klar (hoffe ich), habe es nachvollzogen.
            Und ich habe mich doppelt geirrt; auch OSQL kennt GO, nur über ADO & Co geht es nicht.

            Die Anführungszeichen stören OSQL
            "SRV01\INSTANCE".master.dbo.Data0

            Setze es mal in eckige Klammern, also
            [SRV01\INSTANCE].master.dbo.Data0

            Ansonsten: Starte OSQL und tippe es von Hand ein, dann siehst Du, was geht oder nicht.
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Es funktioniert!

              Vielen vielen Dank!

              Comment

              Working...
              X