Hoscha: Zwei insert-Befehle in einem String???

Hallo,
langsam werde ich hier zum Dauergast...

ich definiere im String strSQL meine INSERT-Anweisung.

Der String wird dann mittels
"conn.execute strSQL"
zur Datenbank geschickt. Klappt zur Zeit prima.

Nun meine Frage: Gibt es eine Möglichkeit, zwei INSERT-Befehle, die in verschiedene Tabellen einfügen, in einem String zu haben?
Kann ich zwei INSERTs beispielsweise mit AND verknüpfen?

Denn nach Möglichkeit (und aus Performancegründen) möchte ich das conn.execute nur einmal aufrufen.

Danke,
Hoscha

  1. Hi,

    langsam werde ich hier zum Dauergast...

    Stammkunden sind herzlich willkommen :-)

    Nun meine Frage: Gibt es eine Möglichkeit, zwei INSERT-Befehle, die in verschiedene Tabellen einfügen, in einem String zu haben?

    Diese Frage kann nur unter Kenntnis des von Dir verwendeten DBMS beantwortet werden, oder pauschal mit "vielleicht". Um es zu überprüfen, würde ich einfach in der entsprechenden Doku unter "Syntax von INSERT INTO" nachlesen.

    Kann ich zwei INSERTs beispielsweise mit AND verknüpfen?

    Ich kenne kein DBMS, welches das Problem mit AND löst.

    Denn nach Möglichkeit (und aus Performancegründen) möchte ich das conn.execute nur einmal aufrufen.

    Sinnvoll.

    Cheatah

    --
    X-Will-Answer-Email: No
    1. Stammkunden sind herzlich willkommen :-)

      Das hör ich gern von jemanden, dessen Name in fast jedem Thread auftaucht.

      Ich verwende MS SQL und baue die Connection mittels ADO auf.
      In der Doku habe ich gestöbert und gefunden, dass zwei inserts nur mit leerzeichen nacheinander geschrieben werden können.
      Das funktioniert zur Zeit auch nicht.

      Gruß,
      Holger

      1. Hi,

        Stammkunden sind herzlich willkommen :-)
        Das hör ich gern von jemanden, dessen Name in fast jedem Thread auftaucht.

        sieh's mal so: Nur wer hier regelmäßig auftaucht, kann auch richtig[tm] geformt werden ;-)

        Ich verwende MS SQL und baue die Connection mittels ADO auf.

        Passe. Die Doku auf microsoft.com ist nach meinem Dafürhalten absolut undurchsichtig strukturiert; deswegen weiß ich nicht, ob ich bei http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_md_03_1kz8.asp richtig rausgekommen bin. Die letzten beiden Aufzählungspunkte dort sagen allerdings, wann nur eine und wann mehrere Zeilen eingefügt werden können.

        In der Doku habe ich gestöbert und gefunden, dass zwei inserts nur mit leerzeichen nacheinander geschrieben werden können.

        Das wäre äußerst ungewöhnlich. Wo hast Du das gefunden?

        Cheatah

        --
        X-Will-Answer-Email: No
        1. Passe. Die Doku auf microsoft.com ist nach meinem Dafürhalten absolut undurchsichtig strukturiert; deswegen weiß ich nicht, ob ich bei http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_md_03_1kz8.asp richtig rausgekommen bin. Die letzten beiden Aufzählungspunkte dort sagen allerdings, wann nur eine und wann mehrere Zeilen eingefügt werden können.

          Ich kann mir in diesem Projekt die Datenbank nicht aussuchen, sondern muss mit der Technologie leben, die mir geboten wird.

          Du hattest recht, das Leerzeichen war eine falsche Fährte.
          Mehrere Zeilen möchte ich nicht einfügen, sondern in mehrere Tabellen.
          Naja, ich werde das nächsten Montag angehen.

          Schönes Wochenende,
          Hoscha

          1. Hi,

            Ich kann mir in diesem Projekt die Datenbank nicht aussuchen, sondern muss mit der Technologie leben, die mir geboten wird.

            das sollte kein Vorwurf gegen Dich sein :-)

            Mehrere Zeilen möchte ich nicht einfügen, sondern in mehrere Tabellen.

            Ach herrje. Da wüsste ich spontan von keinem DBMS, welches sowas kann. Die allgemeine Syntax spricht ebenfalls nur von "INSERT [INTO] table_or_view", ohne Plural. Sorry, aber ich behaupte, Deine Chancen sind gering.

            Trotzdem viel Glück...

            Cheatah

            --
            X-Will-Answer-Email: No
            1. N'Abend,

              das sollte kein Vorwurf gegen Dich sein :-)

              so war das auch nicht gemeint. Es ist nur so, dass in diesem Form sehr häufig geraten wird, dieses oder jenes System zu benutzen.
              Ich werde in diesem Projekt dafür bezahlt, dass ich mich mit MS-SQL anfreunde ;-)

              Also bleibt mir nur noch die Möglichkeit, mehrere Conn Executes zu verwenden, was die Wartezeit erheblich erhöhen wird.

              Gruß,
              Hoscha

              1. Hi Hoscha,

                mehrere Conn Executes zu verwenden, was die Wartezeit erheblich erhöhen wird.

                ich bezweifele diese Aussage bis zum (meßbaren) Beweis des Gegenteils.

                Zwei SQL-Statements bedeuten zweimal analysieren, Ausführungsplan erstellen und ausführen - das ist alles üblicherweise deutlich komplizierter, als zweimal einen String an eine API zu übergeben.

                Wenn Du diese beiden Statements nur einmal innerhalb Deiner Anwendung brauchst, dann vergiß Deine Problemstellung - sie ist irrelevant. (Es geht nur um Millisekunden.)

                Mußt Du diese Statements aber viele tausend Male ausführen, dann versuche nicht, um einen Faktor von 2 zu optimieren, sondern um einen Faktor von vielen Tausend - indem Du die Übersetzung der Statements aus der Schleife auslagerst (Host-Variablen etc.). Damit wäre wirklich ein Performance-Gewinn zu erzielen, den Du spüren würdest.

                Viele Grüße
                      Michael

                --
                T'Pol: I apologize if I acted inappropriately.
                V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
      2. Hi,

        Ich verwende MS SQL und baue die Connection mittels ADO auf.
        In der Doku habe ich gestöbert und gefunden, dass zwei inserts nur mit leerzeichen nacheinander geschrieben werden können.
        Das funktioniert zur Zeit auch nicht.

        Du willst auf einer Connection mehrere SQL-Statements abschicken und das geht nicht?? - Stattdessen willst Du mehrere Conn.Execute (s) machen? - Also, es geht natuerlich. - Oder hast Du was Esoterisches vor?

        Gruss,
        Lude

  2. Hi, hallo

    kurz und bündig ... SQL-statements werden normalerweise mit ; von einander getrennt, diese Semikolon-Trennweise funktioniert aber über ADO eher nicht, selbst bei Oracle als DBMS werden die ; als invalid characters moniert. Access geb ich da gleich noch weniger Chancen

    a) führe zwei mal conn.execute aus  ... wer hat dir da diesen Floh mit Performance an den Hintern geheftet? die Verbindung steht doch eh, da ist eine zweimalige Ausführung von conn.execute so UNERHEBLICH ...

    erst wenn es sich um richtig viele Aktionen handelt, Abfragen + einfügen + abfragen usw. dann solltest du über den Gebrauch von Stored Procedures nachdenken. Bei Access mit seiner "Abfrage" - Architektur aber nicht vernünftig anwendbar ... verwende MS SQL Server (inkl. 40k Würmer pro Stunde) oder Oracle   =  _richtige_ DBMS

    b) baue ein Shaped Recordset auf und erledige die Einfügungen nicht über conn.execute sondern über die Recordset-Instanz mit den Methoden .AddNew .Update usw.

    Shaped Recordsets sind sehr interessant und könnten dir hier weiterhelfen
    Mehr darüber erfährst du über msdn

    Tschau, tschüß,
    Frank