none
Timeout bei @@identity RRS feed

  • Frage

  • Hi,

    mittels ADO füge ich Datensätze in eine SQL 2008R2 Express  (10.50.1600.1) ein.

    Anschließend benötige ich den PrimaryKey von diesem Datensatz.

    Select @@identity from <database>

    Diese Abfrage dauert sehr lange ( ca. 5 sec ).

    Kann mir einer sagen, was ich verkehrt mache ? Oder gibt es andere Möglichkeiten

    diesen PrimaryKey zu ermitteln ?

    Gruß

    Rainer

    Donnerstag, 23. August 2012 07:10

Antworten

  • Select @@identity from <database>

    Hallo Rainer,

    zunächst einmal solltest Du @@Identity besser nicht verwenden, das kann Dir ein falsches (unerwünschtes) Ergebnis liefern. Verwende besser Scope_Identity, denn dass liefert Dir die letzte Identity aus Deinem aktuellen Scope, und nicht die global-letzte Identity.

    Dann verstehe ich nicht, wieso Du bei der Abfrage oben eine FROM Klausel hast, wie genau sieht die aus? Hast Du da etwa ein Tabellennamen stehen? Dann ist es kein Wunder, das es lange dauert, denn dann fragst Du unnötigerweise die komplette Tabelle mit ab; einfach das FROM komplett weg lassen.


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 07:41

Alle Antworten

  • Select @@identity from <database>

    Hallo Rainer,

    zunächst einmal solltest Du @@Identity besser nicht verwenden, das kann Dir ein falsches (unerwünschtes) Ergebnis liefern. Verwende besser Scope_Identity, denn dass liefert Dir die letzte Identity aus Deinem aktuellen Scope, und nicht die global-letzte Identity.

    Dann verstehe ich nicht, wieso Du bei der Abfrage oben eine FROM Klausel hast, wie genau sieht die aus? Hast Du da etwa ein Tabellennamen stehen? Dann ist es kein Wunder, das es lange dauert, denn dann fragst Du unnötigerweise die komplette Tabelle mit ab; einfach das FROM komplett weg lassen.


    Olaf Helper
    Blog Xing

    Donnerstag, 23. August 2012 07:41
  • Hallo Olaf,

    vielen Dank für Deine Antwort.

    Habe in meiner Software das Select-Statement geändert.

    Select Scope_Identity()

    Leider liefert diese Function den Wert NULL.

    Anschließend habe ich mir die ADO Klasse für meinen Compiler etwas genauer angesehen. 

    Nach der Update-Methode steht im Recordset der Primarykey meines eingefügten Datensatzes.  Eigentlich was ich wollte. Werde aber unter Transact Deiner Vorschlag noch einmal aufgreifen.

    Nochmal vilene Dank

    Rainer

    Montag, 27. August 2012 07:42
  • Hallo Olaf,

    vielen Dank für Deine Antwort.

    Habe in meiner Software das Select-Statement geändert.

    Select Scope_Identity()

    Leider liefert diese Function den Wert NULL. Anschließend habe ich mir die ADO Klasse für meinen Compiler etwas genauer angesehen. Nach der Update-Methode steht im Recordset der Primarykey meines eingefügten Datensatzes.  Eigentlich was ich wollte. Werde aber unter Transact Deiner Vorschlagnoch einmal aufgreifen.

    Scope_Identity liefert Dir in Deinem Falle NULL da ADO bereits den Identity Record bestimmt hat.

    Ich empfehle Dir, die Dokumentation der benutzen Klassen zu lesen, da diese Information drin steht


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.




    Montag, 27. August 2012 08:41
  • Hallo Rainer0815,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 29. August 2012 11:23
    Moderator