Laden...

Select @@Identity in einer Transaktion

Erstellt von AlfameisterT vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.810 Views
A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 17 Jahren
Select @@Identity in einer Transaktion

Hallo,

ich habe ein echt seltsammes Problem.
Ich führe mehrere DB-Aktionen in einer Transaktion aus.

In einer Schleife werden ständig Insert-Commands ausgeführt und anschließend ein "Select @@Identity".

Mein Problem ist, wenn ein "Select @@Identity" ausgeführt wird, alle weiteren Insert-Befehle immer wieder die in die selbe Zeile in der Tabelle schreiben. Natürlich ist die neue LastInsertId wieder der Wert wie bei der ersten.
In der Tabelle steht zum Schluss die Werte des letzten Insert-Befehls aus der Schleife.

Begin Transaction

Insert into A ... value = 100...
Select @@Identity -> gibt mir z.B. 10

Insert into A ... value = 200 ...
Select @@Identity -> bringt wieder die 10 zurück

Transaction.Commit()
...

Select * from A where... -> Ergebnis ist der letzte Eintrag, im Bsp. die 200.

An was könnte das liegen?
Frage ich nicht die LastInsertId ab, funktioniert alles.

.

F
10.010 Beiträge seit 2004
vor 17 Jahren

Welche DB?

476 Beiträge seit 2004
vor 17 Jahren

hallo AlfameisterT,

versuch es mit der Funktion SCOPE_IDENTITY(), sie gibt den letztzen Identitätswert im selben Gültigkeitsbereich zurück.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 17 Jahren

Hallo,

es handlet sich um einen SQL-Server.

SCOPE_IDENTITY() hatte ich schon versucht, leider ohne Erfolg.

Ich habe mal zum Spaß die ganze SQL Abfolge direkt in der SQL-Console vom SQLServer-Manager eingegeben.
Da hat es funktioniert.

Ich verzweifle noch. Bei anderen Anwendungen hat das immer funktioniert, die LastInsertId in einer Transaktion abzufragen.

Kann es sein, dass irgendein Trigger vom SQL Server nicht kommt, bzw. das die Abfrage zu schnell nach dem Insert statt findet?

.

3.728 Beiträge seit 2005
vor 17 Jahren
Guid

Ich sag es ungern, aber mit GUIDs als Primärschlüssel hättest Du die Probleme nicht.

Es sollte aber auch mit Autowerten gehen.

Wie machst Du die Transaktionen:*über System.Transactions? *über System.Data.SqlClient.SqlTransaction *über direkten SQL-Code?

Ich verwende meistens System.Transactions. Da sollte es mit SCOPE_IDENTITY() klappen.

A
AlfameisterT Themenstarter:in
154 Beiträge seit 2005
vor 17 Jahren

Hallo,

ich verwende System.Data.SqlClient.SqlTransaction.
Ich werds dann mal mit System.Transactions versuchen.

Das seltsamme ist wirlich, das dieses Vorgehen bis vor einer Weile noch funktioniert hat. Die Datenbank war zwischenzeitlich auf einem anderen Server. Kann es an Einstellungen des DB-Servers oder der Datenbank liegen?

Nachtrag:
leider kein Erfolg. Ich vermute mal da hat der SQL Server irgendein Problem.