Benutzer mit den meisten Antworten
Timeout bei @@identity

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
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.
- Als Antwort vorgeschlagen Elmar Boye Donnerstag, 23. August 2012 18:10
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 29. August 2012 11:22
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.
- Als Antwort vorgeschlagen Elmar Boye Donnerstag, 23. August 2012 18:10
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 29. August 2012 11:22
-
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
- Bearbeitet Robert BreitenhoferModerator Mittwoch, 29. August 2012 11:22 Formatierung
-
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.
- Bearbeitet Daniel_Steiner Montag, 27. August 2012 08:48
-
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,
RobertRobert Breitenhofer, MICROSOFT
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.