Aby powrócić pojedynczą wartość skalarną do rozmówcy należy użyć parametru OUTPUT
, nie RETURN
. RETURN
służy do kodów błędów/statusu. Również przedrostek sp jest zbędny i niepotrzebny.
CREATE PROCEDURE dbo.AddAsset
@Name VARCHAR(500),
@URL VARCHAR(2000),
@new_identity INT = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.Assets(Name, URL) SELECT @Name, @URL;
SET @new_identity = SCOPE_IDENTITY();
END
GO
Wtedy to nazwać:
DECLARE @new_identity INT;
EXEC dbo.AddAsset @Name = 'a', @URL = 'b', @new_identity = @new_identity OUTPUT;
PRINT @new_identity;
EDIT wystarczy dodać zastrzeżenie, że nie wpłynie to na pytającego w tym konkretnym scenariuszu, ale może pomóc w innych sytuacjach lub dla przyszłych czytelników. W SQL Server 2008 R2 i wcześniejszych wersjach dostępna jest funkcja potentially nasty bug z wbudowanymi funkcjami, takimi jak SCOPE_IDENTITY
, gdy do uzyskania wyników do wstawienia wykorzystywany jest paralelizm (pomyśl INSERT FROM othertable
). Ten błąd (here is the Connect item) jest naprawiony w Cumulative Update #5 for SQL Server 2008 R2 SP1, ale jak dotąd poprawka nie pojawiła się w 2008 R2 RTM, 2008 lub 2005.
Przepraszamy. Będę głosować nad resztą. –