Hallo Gemeinde,
ich hab hier ein Problem, das mir graue Haare macht.
Ich habe eine Stored Procedure, die einen Insert in eine Tabelle (SITZUNG) macht.
Bei diesem Insert wird via dafault value newid() ein uniqueidentifier erzeugt.
Dieser wird von der SP zurückgegeben.
Das funktioniert auch wunderbar wenn ich es im Management Studio teste.
Sobald ich die SP von einem C# oder Webprojekt aufrufe passiert folgendes:
Der uniqueidentifier wird korrekt zurückgegeben und es tritt kein Fehler auf.
Wenn ich aber die Tabelle SITZUNG anschaue, ist der Eintrag nicht vorhanden.
Er verschwindet einfach. Mit Debugmeldungen sehe ich, das der Tabelleneintrag
bis zum Ende der SP vorhanden ist. Danach ist er weg.
Da keine Transaktion gestartet wurde kann es auch nicht an einem Rollback liegen.
Wenn ich danach via Management Studio wieder einen Datensatz einfüge sehe ich
auch das die PKs (Autowert) der verschwundenen varbraucht sind, also darauf folgende
PKs erzeugt werden. Ich habe schon einige solche Prozeduren in verwendung aber noch
nie ein solchen Phänomen gesehen.
Die SP
ALTER PROCEDURE [dbo].[spLogin] @SCHNITTSTELLE INT, @LOGIN VARCHAR(50), @SITZUNG UNIQUEIDENTIFIER OUTPUT, @MANDAT INT OUTPUT AS BEGIN DECLARE @id INT, @benutzer INT BEGIN TRY EXEC spGetMandat @SCHNITTSTELLE, @LOGIN, @benutzer OUTPUT, @MANDAT OUTPUT IF(@MANDAT > 0) BEGIN INSERT INTO [dbo].[SITZUNG] ([BENUTZER], [SCHNITTSTELLE], [MANDAT]) VALUES (@benutzer, @SCHNITTSTELLE, @MANDAT) SET @id = @@IDENTITY SELECT @SITZUNG = [SITZUNG] FROM [dbo].[SITZUNG] WHERE [ID] = @id END ELSE BEGIN SET @SITZUNG = NULL END END TRY BEGIN CATCH THROW; RETURN; END CATCH END