verwendetes Datenbanksystem: MS SQL 10
Hi @ All.
Ich habe ein kleines Problem...
Folgender Code:
CREATE PROCEDURE CreateFoo
@a NVARCHAR(100),
@b NVARCHAR(100)
BEGIN
INSERT INTO Foo (A, B)
VALUES (@a, @b)
DECLARE @fooID INT = SCOPE_IDENTITY()
DECLARE @text NVARCHAR(250) = N'Foo Created'
EXECUTE AddSystemNote @text
SELECT @fooID
END
CREATE PROCEDURE AddSystemNote
@text NVARCHAR(100)
BEGIN
INSERT INTO SystemNotes (TEXT)
VALUES (@text)
SELECT SCOPE_IDENTITY()
END
Mein Problem:
Wenn ich CreateFoo aufrufe, gibt er mir nicht die SCOPE_IDENTITY vom erstellten Foo zurück, sondern die von der erstellten SystemNote?
Wie kann das sein?
Gruß, Christian.
Also bei tut's. Zumindest im Kontext des SSMS. Bekomme zwei Ergebnisse, zuerst die ID von SystemNotes, dann von Foo; so wie man es erwartet.
Arghl...
Bekomme zwei Ergebnisse
Da hätte ich auch selbst drauf kommen können... Hab natürlich schön brav einfach nur die fooID aus dem Ergebnis gelesen, ohne halt dran zu denken, dass ich zwei ResultSets bekomme... War dann natürlich die falsche, nämlich die ID von der SystemNote.
Kann ich das erste Ergebnis irgendwie "verschlucken"?
Also nach dem Motto
EXECUTE AddSystemNote @text SEND RESULTS INTO @nirvana
Gruß, Christian.
Habs jetzt so gelöst:
CREATE PROCEDURE CreateFoo
@a NVARCHAR(100),
@b NVARCHAR(100)
BEGIN
INSERT INTO Foo (A, B)
VALUES (@a, @b)
DECLARE @fooID INT = SCOPE_IDENTITY()
DECLARE @text NVARCHAR(250) = N'Foo Created'
EXECUTE AddSystemNote @text, @suppressOutput = 1
SELECT @fooID
END
CREATE PROCEDURE AddSystemNote
@text NVARCHAR(100),
@suppressOutput BIT = 0
BEGIN
INSERT INTO SystemNotes (TEXT)
VALUES (@text)
IF @suppressOutput = 0 THEN
SELECT SCOPE_IDENTITY()
END
END
Gruß, Christian.