Hallo Alle!
Ich arbeite mit folgender Datenbank:
- MS
SQL 2005 Standard
- Zugriff per
ADO (aus VB)
Ich habe zwei Tabellen erstellt.
Die erste (TestCounter) enthält mehrere Zähler, allerdings ist nur einer relevant.
http://nathan-systems.ch/images/TabelleCounter.gif
Die zweite Tabelle (TestTable) enthält Datensätze, welche jeweils einen
Eindeutigen Zählerwert enthalten sollen.
D.h. ich will neben der Tabellen ID einen weiteren Wert, welcher durchlaufend nummeriert wird.
Diese Tabelle wird später mit weiteren Informationsfeldern ergänzt (Name, Adresse usw.).
http://nathan-systems.ch/images/TabelleTest.gif
Bei jedem neuen Datensatz in der Tabelle "TestTable" soll der Zähler erhöht werden und ins Insert eingebunden werden.
Da ich keine Datensätze ohne Zähler-Wert und keine Lücken in der Zählerfolge haben will, möchte ich das ganze gerne per Transaktion lösen.
D.h. falls etwas schief geht (Programmfehler, Ungültige Daten, Server brennt ab, User zieht den Stecker usw.
) soll alles rückgängig gemacht werden (keine Änderung der Daten).
Leider kenne ich mich mit solchen Transaktionen nicht aus... könnt ihr mir da weiterhelfen?
Das
SQL Query habe ich soweit schon erstellt:
SQL-Code:
-- Deklarationen
DECLARE @NewCountValue int
DECLARE curNewCount CURSOR FOR SELECT [Value] FROM dbo.TestCounter WHERE ID = 'TestCounter'
-- Zähler erhöhen
UPDATE
dbo.TestCounter
SET
[Value] = (SELECT MAX(Value)+1 FROM TestCounter WHERE ID = 'TestCounter')
WHERE
ID = 'TestCounter'
-- Cursor öffnen & neuen (erhöhter) Wert auslesen
OPEN curNewCount
IF @@Cursor_Rows <> 0
BEGIN
FETCH NEXT FROM curNewCount INTO @NewCountValue
END
-- Tabelleneintrag mit neuem Wert erstellen
INSERT INTO dbo.TestTable (IdCount) VALUES (@NewCountValue)
-- Cursor schliessen freigeben
CLOSE curNewCount
DEALLOCATE curNewCount
--SELECT @NewCountValue
Wie kann ich dieses
Query nun als sichere Transaktion verpacken (Commit usw.)?
Wie sieht es aus, wenn mehrere Benutzer gleichzeitig einen Datensatz erstellen?
Danke im Vorraus!
Gruss Fellmer