Announcement

Collapse
No announcement yet.

Produktdatenbank mit Daten aus der Warenwirtschaftsdatenbank füttern

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

  • #31
    Mein Problem ist, dass ich das Gefühl habe, dass du etwas auf dem Hozweg bist - Frage ist, ob falscher Ast oder falscher Baum

    Interessant wäre der Anwendungsfall - das mit den zwei Tabellen ist ja nur teil des (verrmeindlichen) Lösungswegs (oder wird's wieder ein Datawarehouse -> die hab ich sei ich hier im Forum bin irgendwie gefressen)

    Ein 'sonderfall' der Prozedur ist ja auch der Trigger - aber es ist grundsätzlich selten eine Tabelle eins zu eins im selben dbms zu kopieren - da brauchts einen Grund... Warum tut's keine View z.B.

    .............

    Kann mir Lebhaft vorstellen, wie man es in Oracle macht...

    aber auch auf einer Oracle-datenbank bekommst du für

    Select NUMMER into id_p from T_Mitglieder where Vorname = Vornamein and
    Nachname = Namein;


    normalerweise die Höchststrafe

    Comment


    • #32
      So lieber tömmel, hier erst mal der Code meines Triggers mit Transaction:
      Code:
       
      USE [TestDB]
      GO
      
      Create PROCEDURE dbo.Kopieren
      
      @ID_var int,
      @maxID int,
      @Testfeld_var VARCHAR(20)
      
      AS
      BEGIN
      Set IDENTITY_INSERT TestDB02.dbo.Test_DB02 on
      Select @maxID = max(ID_Test_1) from dbo.Test_1;
      Select @ID_var = ID_Test_1 from dbo.Test_1 where ID_Test_1 = @maxID;
      Select @Testfeld_var = Testfeld_1  from dbo.Test_1 where ID_Test_1 = @maxID;
      INSERT INTO dbo.Test_2 (ID_Test_2,Testfeld_2) values(@ID_var, @Testfeld_var);
             BEGIN Transaction zu_DB02
             INSERT INTO TestDB02.dbo.Test_DB02 (ID_TestDB02, Testfeld_DB02) values(@ID_var, @Testfeld_var); 
             commit 
             
      
      
      END;
      Nun zu der Sinnfrage:
      Es geht darum bestimmte werte aus der Artikeltabelle der Centrondatenbank, in eine neue Datenbank zu kopieren. Allerdings nicht die ganze Tabelle 1:1, sondern nur einzelne Werte. Den ganzen Mist habe ich gemacht um Syntax von SQL zu wiederholen und um mich in MS-SQL einzugewöhnen. Natürlich macht es keinen Sinn redundante Werte zu erzeugen, aber danke für den Hinweiß

      So, zu meinen eigentlichen Ziel:
      Es soll eine kleine Datenbank geben, unabhängig von der Centrondatenbank, in der NUR die Kunden (Kundennummer / Kundenname) mit den Lizenzartikeln und den Laufzeiten der Artikel verwaltet werden sollen, so dass wir sagen können, wann bei Kunde X Die Laufzeit für seine Antivirussoftware ausläuft. Da diese Artikel Lizenz-IDs haben, welche zu dem jeweiligen Kunden zugeordnet sind, brauchen wir eine eigene Datenank, in der diese IDs eingetragen werden, weil Centron diese Möglichkeit nicht mit bringt, oder nur sehr begrenzt.

      Comment


      • #33
        [Highlight=SQL]Select @maxID = max(ID_Test_1) from dbo.Test_1;
        Select @ID_var = ID_Test_1 from dbo.Test_1 where ID_Test_1 = @maxID;[/Highlight]

        @ID_var ist irgendwie das gleiche wie @maxID. (Außer eine andere Transaktion hat es geschafft zwischen diesen beiden Selects den Datensatz zu löschen). Was soll das

        Und der nächste Select betrifft schon wieder den selben Datensatz? Und wieso übergibst du @Testfeld_var an die Prozedur wenn du den Wert doch nicht benutzt sondern in der Prozedur bestimmst? Irgendwie benutz du keinen der an die Prozedur übergeben Variablen?


        Scheinbar willst du den Datensatz mit der höchsten ID in zwei andere Tabellen schreiben.
        Dann würde ich einfach den Datensatz in eine tempörare Tabelle schreiben und 2 Insert ... Select ausführen. Empfinde ich als deutlich einfacher als das was du da veranstalltest Würde man in Oracle vermutlich auch so machen.

        [Highlight=SQL]
        SELECT ID_Test_1, Testfeld_1 INTO #Temp FROM dbo.Test_1 WHERE ID_Test_1 >= all (SELECT ID_Test_1 FROM dbo.Test_1);

        INSERT INTO dbo.Test_2 (ID_Test_2,Testfeld_2) SELECT ID, TestFeld FROM #Temp;
        INSERT INTO TestDB02.dbo.Test_DB02 (ID_TestDB02, Testfeld_DB02) SELECT ID, TestFeld FROM #Temp; [/Highlight]

        Comment


        • #34
          ja hast ja Recht

          ich war schonmal froh das es das tut was ich will :P

          Comment


          • #35
            mmh... also irgendwer muss die procedure ja abfeuern... wird's jetzt am End nicht ein Trigger?

            und warum kannst du deine Kunden und die entsprechenden Artikel nich mit einer Sicht holen?

            Comment


            • #36
              Weil ich die Daten verändern möchte, die ich hole, und ja, es wird ein Trigger
              Zuletzt editiert von MFL; 11.12.2012, 12:10.

              Comment


              • #37
                Hallo nochmal zusammen,

                nochmal eine Frage,
                gibt es die Möglichkeit eine Transaktion immer zu einer bestimmten Uhrzeit aufzurufen?

                Comment


                • #38
                  Originally posted by MFL View Post
                  Hallo nochmal zusammen,

                  nochmal eine Frage,
                  gibt es die Möglichkeit eine Transaktion immer zu einer bestimmten Uhrzeit aufzurufen?
                  Meinst Du jetzt beim Online Banking?
                  Gruß, defo

                  Comment


                  • #39
                    Ein Sql Server Agent Auftrag schreiben der deinen transaktionalen Code ausführt und dann einen Wartungsplan mit dem entsprechend Scheduling erstellen der den Auftrag regelmäßig ausführt.

                    Comment


                    • #40
                      Originally posted by defo View Post
                      Meinst Du jetzt beim Online Banking?
                      Ja ja, ein Dauerauftrag ist was für Anfänger :-P

                      Originally posted by Ralf Jansen View Post
                      Ein Sql Server Agent Auftrag schreiben der deinen transaktionalen Code ausführt und dann einen Wartungsplan mit dem entsprechend Scheduling erstellen der den Auftrag regelmäßig ausführt.
                      Klingt nicht schlecht, hab ich auch schon von gelesen und auch schon dran gesessen und es funktioniert, danke dir ;-)
                      Zuletzt editiert von MFL; 11.12.2012, 16:50.

                      Comment


                      • #41
                        okay, Wartungsplan hab ich gefunden. Den Auftrag suche ich noch

                        Comment


                        • #42
                          Im Object Explorer des Management Studios findest du den Sql Server Agent. Darin den Aufträge Knoten in dessen Kontextmenü du den Punkt zum erstellen eines Auftrags finden solltest. Der Wizard dazu sollte weitestgehend selbsterklärend sein.
                          Danach dann im Object Explorer im Kontextmenü des Verwaltung/Wartungspläne Punktes den Wizard für neue Wartungspläne starten. Sollte ebenfalls selbsterklärend sein hauptsächlich halt Zeitplan definieren und den auszuführenden Auftrag auswählen.

                          Edit:

                          Kann sein das man den Sql Server Agent Knoten nicht immer sieht. Der Agent ist ein eigener Dienst der auf dem Server laufen muss. Eventuell muss der noch gestartet werden und der User mit dem du dich im Management Studio rumtreibst sollte natürlich auch entsprechende Rechte haben Aufträge zu erstellen.

                          Comment

                          Working...
                          X