[MSSQL] Problem mit LAST_INSERT_ID()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Meines Wissens (asp2php mag mehr wissen) verwendet der SQL-Server die Variable @@IDENTITY ...

    Also könnte sowas hier funktionieren ...

    SET @pers_id=@@IDENTITY

    Wichtig ist dann, dass die entsprechende Spalte auch als Identitätsspalte definiert wurde ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #17
      Und was steht da jetzt wenn du Debug=true eingebunden hast ?
      -> It`s good to be bad! <-

      http://de.php.net
      http://php-faq.de
      http://www.schattenbaum.net
      http://www.dreamcodes.com

      Kommentar


      • #18
        also erstmal zu
        $db->debug=true;

        Fehlermeldung

        DasDokument enthält keine daten!

        Kommentar


        • #19
          die fehlermeldung bekommen ich jetzt

          Warning: (null)(): Invoke() failed: Ausnahmefehler aufgetreten. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC SQL Server Driver][SQL Server]Die Variable '@pers_id' muss deklariert werden. in C:\xampp\htdocs\test\index.php on line 25

          Warning: (null)(): Invoke() failed: Ausnahmefehler aufgetreten. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC SQL Server Driver][SQL Server]Zeile 1: Falsche Syntax in der Nähe von '322432'. in C:\xampp\htdocs\test\index.php on line 27

          Warning: (null)(): Invoke() failed: Ausnahmefehler aufgetreten. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC SQL Server Driver][SQL Server]Die Variable '@ger_id' muss deklariert werden. in C:\xampp\htdocs\test\index.php on line 28

          Warning: (null)(): Invoke() failed: Ausnahmefehler aufgetreten. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxfehler beim Konvertieren des varchar-Wertes '{@ger_id}' in eine Spalte vom Datentyp int. in C:\xampp\htdocs\test\index.php on line 29
          Zuletzt geändert von dingo; 14.07.2004, 20:32.

          Kommentar


          • #20
            Also weiter ... deklarieren must Du eine Variable mit ... na ... :

            DECLARE @local_variable data_type;

            Also mit

            DECLARE @pers_id INT(4)

            ... nur mal so als beispiel ...

            allerdings glaube ich mittlerweile es wäre besser du würdest die Variable @@IDENTITY einfach nur mit SELECT @@IDENTITY abfragen ...
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #21
              So ganz verstehe ich dich jetzt nicht
              Kannst du mir das bitte noch mal erklären.

              Danke im Voraus
              Zuletzt geändert von dingo; 15.07.2004, 14:37.

              Kommentar


              • #22
                Kann mir einer helfen, oder wies keiner so richtig über SQL bescheid.
                Wo kann ich mich dann hin wenden?????

                Kommentar


                • #23
                  Ich dachte es wäre schon durch ...

                  Punkt 1: In den Tabellen Person und Geraete muß das Schlüsselfeld (pers_id, ger_id) als Identität erstellt worden sein ...

                  [pers_id] [int] IDENTITY (1, 1) NOT NULL ,
                  bzw.
                  [pers_id] [int] IDENTITY (1, 1) NOT NULL ,

                  Steht im SQL Server Enterprise manager unter den Feld-Optionen ... (Identität (ID))

                  danach hast Du 2 Alternativen:


                  2a. Du arbeitest mit Uservariablen ....

                  2a.1. Uservariablen deklarieren ...
                  DECLARE @pers_id INT(4);
                  DECLARE @ger_id INT(4);

                  2a.2. Datensatz in Personen einfügen ... (dabei kein Attribute pers_id und entsprechend keinen Wert angeben!)
                  INSERT INTO Personen (...) VALUES (...)

                  2a.3. Wert in eine Benutzervariable übertragen ...
                  SET @pers_id=@@IDENTITY

                  2a.4. Datensatz in Geraete einfügen ... (dabei kein Attribute ger_id und entsprechend keinen Wert angeben!)
                  INSERT INTO Geraete (...) VALUES (...)

                  2a.5. Wert in eine Benutzervariable übertragen ...
                  SET @ger_id=@@IDENTITY

                  2a.6. Verknüpfungstabelle schreiben ...
                  INSERT INTO zusammen (pers_id, ger_id) VALUES (@pers_id, @ger_id);


                  2b. Fragst die generierten Identities in PHP ab ...

                  2b.1. Datensatz in Personen einfügen ... (dabei kein Attribute pers_id und entsprechend keinen Wert angeben!)
                  INSERT INTO Personen (...) VALUES (...)

                  2b.2. Abfragen in PHP ... und schreiben in die Variable $pers_id ...
                  SELECT @@IDENTITY

                  2a.3. Datensatz in Geraete einfügen ... (dabei kein Attribute ger_id und entsprechend keinen Wert angeben!)
                  INSERT INTO Geraete (...) VALUES (...)

                  2b.4. Abfragen in PHP ... und schreiben in die Variable $ger_id ...
                  SELECT @@IDENTITY

                  2b.5. Verknüpfungstabelle schreiben ...
                  $sth = $db->prepare("INSERT INTO zusammen (pers_id, ger_id) VALUES (?, ?)");
                  $db->execute($sth, array($pers_id, $ger_id));
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #24
                    Ich weis zwar was du meins theoretisch,aber ich kann das irgendwie nicht ins Praktisch umsatzen.

                    Jch habe es mal versucht leider bekomme ich 4 Fehlermeldung.

                    Code:
                    $sql = "INSERT INTO Person (titel,name,vorname,firma,adresse,ort,plz,telefon,mobile,fax,email)
                    VALUES('{$titel}','{$name}','{$vorname}','{$firma}','{$adresse}','
                    {$ort}','{$plz}','{$telefon}','{$mobile}','{$fax}','{$email}')";
                    $db->Execute($sql);
                    $db->Execute("DECLARE @pers_id INT(4)");
                    $sql = "INSERT INTO Geraete (ltdNr,IdentNr,DPCname,IPadresse,geraetetyp,garantie) VALUES 
                    
                    ('{$ltdNr}','{$IdentNr}','{$DPCname}','{$IPadresse}','{$geraetetyp}','{$garantie}')";
                    $db->Execute($sql);
                    $db->Execute("DECLARE @ger_id INT(4)");
                    $db->Execute("SET @ger_id=@@IDENTITY");
                    $db->Execute("SET @pers_id=@@IDENTITY");
                    $sqll = "INSERT INTO zusammen (pers_id, ger_id) VALUES (@pers_id, @ger_id)";
                    $db->Execute($sql);
                    2 x Spalte oder Parameter Nr. -1: Für den Datentyp int kann keine Spaltenbreite angegeben werden.
                    Die Variable '@ger_id' muss deklariert werden
                    Die Variable '@pers_id' muss deklariert werden.

                    Kommentar


                    • #25
                      Ja ich weiss ich mach' zu selten was mit dem MS-SQL-Server ... lass einfach mal das (4) hinter dem INT weg ... das war ein dummer copy und paste ... !

                      P.S. Die Übertragung in die Uservariable muss jeweils nach dem INSERT - Statement erfolgen ... !!!
                      $db->Execute("SET @pers_id=@@IDENTITY");
                      sonst hast Du in @pers_id und @ger_id jeweils den selben Wert!
                      Zuletzt geändert von goth; 16.07.2004, 16:14.
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #26
                        also das ein ist jetzt geschafft.
                        aber leider zeigt er noch die beiden fehler.
                        Die Variable '@pers_id' muss deklariert werden.
                        Die Variable '@ger_id' muss deklariert werden.
                        Zuletzt geändert von dingo; 16.07.2004, 18:30.

                        Kommentar


                        • #27
                          Klar, weil du sie einzeln rüber schickst, werden die Variable nach Termination entfernt.
                          Da es um MS-SQL-Server handelt, schickt alle T-SQL-Command Semikolon getrennt in einem Rutsch rüber. Also zuerst die beiden declare dann 1. insert, 1. set, 2. insert, 2. set 3. insert. Wenn du aber öfters solche Operationen durchführst, dann empfehlt es sich SP dafür zu schreiben.

                          Kommentar


                          • #28
                            Werden die Variablen da nicht per connection deklariert ... war mir nicht bewusst ... eigentlich verwende ich den SQL-Server nur mit ASP.NET ...
                            carpe noctem

                            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                            Kommentar


                            • #29
                              Jo danke euch für die andworten.
                              Aber ich habe mich entschieden das ganze in ASP und SQL zu machen.
                              Kenn einer Gute Seiten wo mann infos über ASP bekommt.

                              Kommentar


                              • #30
                                www.aspfaq.de
                                www.aspextra.de
                                www.aspheute.de
                                www.aspheute.com

                                und natürlich www.msdn.com
                                Zuletzt geändert von asp2php; 17.07.2004, 09:15.

                                Kommentar

                                Lädt...
                                X