Announcement

Collapse
No announcement yet.

Einbindung der MERGE-Anweisung

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

  • Einbindung der MERGE-Anweisung

    Hallo Forum,

    ich habe mit der neuen Variante des MERGE-Befehls eine Anweisung entwickelt, die eine Tabelle meines SQL Servers aktualisiert.

    Code:
    MERGE INTO dbo.bla
    USING LinkedServer..bla on dbo.bla.ID = LinkedServer..bla.ID
    
    WHEN MATCHED THEN
       UPDATE SET...
    WHEN NOT MATCHED THEN
       INSERT (...)
       VALUES (...)
    WHENT NOT MATCHED BY SOURCE THEN
       DELETE;
    Nun meine Frage:

    Wo und wie kann ich den entwickelten Merge-Befehl einsetzen, um den Aktualisierungs-Prozess beispielsweise einmal täglich über geplante Tasks anzuschieben???

  • #2
    Über 'nen SQL-Server-Agent Job

    Comment


    • #3
      )) Bin Beginner, geht's ein wenig detaillierter?

      P.S. Arbeit mit MS SERVER 2008 EXPRESS EDITION WITH ADVANCED SERVICES.
      Zuletzt editiert von joghurtjens; 11.09.2009, 12:16.

      Comment


      • #4
        Im Object-Explorer sollte der letzte Eintrag in der zweite Ebene SQL-Server-Agent sein.
        Wenn Du das nicht hast, dann ist der wohl bei SQL-Express 2008 nicht dabei...

        Comment


        • #5
          dann ist der wohl bei SQL-Express 2008 nicht dabei...
          So is es; den hat MS sich bei der Express Edition ausgespart.

          Wenn es ein fixes Script ist:
          Script als Datei speichern und mittels Windows-Taskplaner das Programm "SQLCMD.exe" starten und dabei die Script-Datei als Parameter angeben.
          Zu SqlCmd ist alles ausführlich in der BOL beschrieben, dort kannst Du es nachlesen.

          P.S.: Wieso führst Du es direkt auf dem LinkedServer aus, statt auf einem anderem?
          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


          • #6
            SQL SERVER Agent ist in MS SERVER 2008 EXPRESS EDITIONs nicht vorhanden.

            Realisierungsstrategie läuft über Skripts, die in die geplanten Tasks eingebunden werden müssen.

            Was ist dabei zu beachten? Ein Beispiel wäre hilfreich.

            Comment


            • #7
              Ups, da ist mir Holger zuvorgekommen.

              Zum Thema Verbindungsserver:
              Auf dem verbundenen Server liegen die aktuellen Daten unseres ERP-Systems, die ich für meine Anwendung "abgreife".

              Comment


              • #8
                Muss trotz der Hinweise nochmal nachhaken:

                Servername = PC30\SQL2008EXPRESS.
                Datenbankname = Schimmel
                Skriptdatei = C:\Dokumente und Einstellungen\USER1\Desktop\VE_Aktualisierung.sql

                Nun habe ich eine Bachdatei namens Schimmel_Update.bat mit folgendem Inhalt erstellt:

                sqlcmd -S PC30\SQL2008EXPRESS -i "C:\Dokumente und Einstellungen\klyscz\Desktop\VE_Aktualisierung.sql "

                Nun starte ich die Schimmel_Update.bat und erwarte, dass die Daten gemäß dem erfolgreich getesteten MERGE-Befehls aktualisiert werden, aber nichts tut sich.

                Was mache ich falsch???
                Zuletzt editiert von joghurtjens; 14.09.2009, 11:33.

                Comment


                • #9
                  aber nichts tut sich.
                  Nach dieser Aussage würd ich mal auf ein vergessenes COMMIT prüfen.

                  Dim
                  Zitat Tom Kyte:
                  I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                  Comment


                  • #10
                    Ich dachte Commit bezieht sich auf eine Transaction???

                    Meine Skriptdatei sieht wie folgt aus:

                    MERGE INTO dbo.tblVE
                    USING WODIS_ODBC..WODIS.TMI_VE AS WODISVE
                    ON (dbo.tblVE.VE_KEY = WODISVE.VE_KEY)

                    WHEN MATCHED THEN
                    UPDATE SET
                    dbo.tblVE.VE_KEY = WODISVE.VE_KEY,
                    dbo.tblVE.VGL_KEY = WODISVE.VGL_KEY,
                    dbo.tblVE.MA_KEY = WODISVE.MA_KEY,
                    dbo.tblVE.WIE_KEY = WODISVE.WIE_KEY,
                    dbo.tblVE.OBJ_KEY = WODISVE.OBJ_KEY,
                    dbo.tblVE.VE_NR = WODISVE.VE_NR,
                    dbo.tblVE.WIE_NR = WODISVE.WIE_NR,
                    dbo.tblVE.OBJ_NR = WODISVE.OBJ_NR,
                    dbo.tblVE.VE_ETAGE_4_1_0 = WODISVE.VE_ETAGE_4_1_0,
                    dbo.tblVE.VE_ZUGANG = WODISVE.VE_ZUGANG,
                    dbo.tblVE.VE_ABGANG = WODISVE.VE_ABGANG,
                    dbo.tblVE.VE_ERSTBEZUG = WODISVE.VE_ERSTBEZUG,
                    dbo.tblVE.VE_KTEXT = WODISVE.VE_KTEXT,
                    dbo.tblVE.VE_QM = WODISVE.VE_QM,
                    dbo.tblVE.VE_FINANZKZ = WODISVE.VE_FINANZKZ,
                    dbo.tblVE.VE_BEZUGAB = WODISVE.VE_BEZUGAB,
                    dbo.tblVE.VE_LTEXT = WODISVE.VE_LTEXT,
                    dbo.tblVE.ERF_BEN_NR = WODISVE.ERF_BEN_NR,
                    dbo.tblVE.AEND_BEN_NR = WODISVE.AEND_BEN_NR,
                    dbo.tblVE.ERF_DATUM = WODISVE.ERF_DATUM,
                    dbo.tblVE.AEND_DATUM = WODISVE.AEND_DATUM,
                    dbo.tblVE.VE_LAGE = WODISVE.VE_LAGE,
                    dbo.tblVE.VE_EXPORTKZ = WODISVE.VE_EXPORTKZ,
                    dbo.tblVE.VE_EXPORTDOK = WODISVE.VE_EXPORTDOK,
                    dbo.tblVE.AEND_DETAILS = WODISVE.AEND_DETAILS,
                    dbo.tblVE.VE_VERKAUF = WODISVE.VE_VERKAUF,
                    dbo.tblVE.VE_KAUFPREIS = WODISVE.VE_KAUFPREIS,
                    dbo.tblVE.VE_INFOVERMARKTUNG = WODISVE.VE_INFOVERMARKTUNG,
                    dbo.tblVE.ETG_KEY = WODISVE.ETG_KEY

                    WHEN NOT MATCHED THEN
                    INSERT (VE_KEY, VGL_KEY, MA_KEY, WIE_KEY, OBJ_KEY, VE_NR, WIE_NR, OBJ_NR, VE_ETAGE_4_1_0, VE_ZUGANG, VE_ABGANG, VE_ERSTBEZUG, VE_KTEXT, VE_QM, VE_FINANZKZ, VE_BEZUGAB, VE_LTEXT, ERF_BEN_NR, AEND_BEN_NR, ERF_DATUM, AEND_DATUM, VE_LAGE, VE_EXPORTKZ, VE_EXPORTDOK, AEND_DETAILS, VE_VERKAUF, VE_KAUFPREIS, VE_INFOVERMARKTUNG, ETG_KEY)
                    VALUES (WODISVE.VE_KEY, WODISVE.VGL_KEY, WODISVE.MA_KEY, WODISVE.WIE_KEY, WODISVE.OBJ_KEY, WODISVE.VE_NR, WODISVE.WIE_NR, WODISVE.OBJ_NR, WODISVE.VE_ETAGE_4_1_0, WODISVE.VE_ZUGANG, WODISVE.VE_ABGANG, WODISVE.VE_ERSTBEZUG, WODISVE.VE_KTEXT, WODISVE.VE_QM, WODISVE.VE_FINANZKZ, WODISVE.VE_BEZUGAB, WODISVE.VE_LTEXT, WODISVE.ERF_BEN_NR, WODISVE.AEND_BEN_NR, WODISVE.ERF_DATUM, WODISVE.AEND_DATUM, WODISVE.VE_LAGE, WODISVE.VE_EXPORTKZ, WODISVE.VE_EXPORTDOK, WODISVE.AEND_DETAILS, WODISVE.VE_VERKAUF, WODISVE.VE_KAUFPREIS, WODISVE.VE_INFOVERMARKTUNG, WODISVE.ETG_KEY)

                    WHEN NOT MATCHED BY SOURCE THEN
                    DELETE;

                    GO

                    Comment


                    • #11
                      Ich habe

                      sqlcmd -S PC30\SQL2008EXPRESS -i "C:\Dokumente und Einstellungen\klyscz\Desktop\VE_Aktualisierung.sql "

                      nun einmal über die Konsole angeschoben, mit dem Ergebnis: "Ungültiger Objektname dbo.tblVE." ==> Tabelle ist aber in der Datenbank "Schimmel" vorhanden.

                      Evtl. muss ich noch irgendwo den Namen der Datenbank zuordnen???

                      Comment


                      • #12
                        Originally posted by joghurtjens View Post
                        Ich habe

                        sqlcmd -S PC30\SQL2008EXPRESS -i "C:\Dokumente und Einstellungen\klyscz\Desktop\VE_Aktualisierung.sql "

                        nun einmal über die Konsole angeschoben, mit dem Ergebnis: "Ungültiger Objektname dbo.tblVE." ==> Tabelle ist aber in der Datenbank "Schimmel" vorhanden.

                        Evtl. muss ich noch irgendwo den Namen der Datenbank zuordnen???
                        Entweder im SqlCmd-String die Datenbank noch angeben

                        sqlcmd -S PC30\SQL2008EXPRESS -d Schimmel -i "C:\Dokumente und Einstellungen\klyscz\Desktop\VE_Aktualisierung.sql "

                        oder im Skript am Anfang folgendes Zeile hinzufügen
                        USE Schimmel;

                        Comment


                        • #13
                          That's it.

                          D A N K E

                          Comment

                          Working...
                          X