ScopeIdentitiy in einer Transaction

01/12/2008 - 16:19 von Albert Andersson | Report spam
Hallo zusammen

Ich nutze MSSQL Server 2005.

Ich möchte 2 SP aufrufen und inserts machen. Wenn eine der beiden SP den
Insert aus welchem grund auch immer nicht machen kann, möchte ich die
ganze aktion zückgàngig machen.

Starten tue ich das ganze aus C# heraus. Der Ablauf ist in etwa dieser:

1. SqlCommand und SqlConnection definieren
2. Transaction starten
3. SP_1 --> ScopeIdentity()
4. ScopeIdentity() --> SP_2
5. Rollback

Die ID, welche in der SP_1 generiert wird nutze ich als Fremdschlüssel
in einer Tabelle, die ich mit der SP_2 befülle.

Hier bekomme ich eine Fehlermeldung betreffend des Primary rsp Foreing
Key. Der grund ist wohl, dass der in der 2. SP noch nicht physisch
existiert und daher nicht genutzt werden kann.

Wenn ich keine Transactions nutze, dann funktioniert das ganze.

Notfalls lösche ich den ersten Insert einfach wieder, finde ich aber
nicht besonders hübsch.

Jemand einen Tipp?

mfg
Albert
 

Lesen sie die antworten

#1 Albert Andersson
02/12/2008 - 09:57 | Warnen spam
Albert Andersson schrieb:
Notfalls lösche ich den ersten Insert einfach wieder, finde ich aber
nicht besonders hübsch.



Ich habe herausgefunden, dass die ID troz rollback ansteigt.
Also wenn die ID 100 vergeben wird und ein Rollback stattfindet, wird
das nàchste mal die 101 vergeben.
Daher kommt es aufs selbe heraus, bis auf die Tatsache halt, dass beim
Delete noch etwas scheifgehen kann und dieser darum nicht durchgeführt wird.

Vorerst werde ich den ersten Insert also manuell Löschen.

Ähnliche fragen