Laden...

Problem mit SCOPE_IDENTITY

Erstellt von TheBrainiac vor 11 Jahren Letzter Beitrag vor 11 Jahren 865 Views
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 11 Jahren
Problem mit SCOPE_IDENTITY

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.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
T
94 Beiträge seit 2007
vor 11 Jahren

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.

TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 11 Jahren

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.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
TheBrainiac Themenstarter:in
795 Beiträge seit 2006
vor 11 Jahren

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.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`