para devolver un solo valor escalar a la persona que llama debe utilizar un parámetro OUTPUT
, no RETURN
. RETURN
es para códigos de error/estado. Además, el prefijo sp es redundante e innecesario.
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
Entonces llamarlo:
DECLARE @new_identity INT;
EXEC dbo.AddAsset @Name = 'a', @URL = 'b', @new_identity = @new_identity OUTPUT;
PRINT @new_identity;
EDITAR sólo añadir una advertencia de que no afectará el autor de la pregunta en este escenario específico, pero puede ayudar en otros escenarios o para los futuros lectores. En SQL Server 2008 R2 y versiones anteriores, hay un potentially nasty bug con funciones integradas como SCOPE_IDENTITY
cuando se utiliza el paralelismo para derivar los resultados que se insertarán (piense en INSERT FROM othertable
). Este error (here is the Connect item) está arreglado en Cumulative Update #5 for SQL Server 2008 R2 SP1, pero hasta ahora no ha aparecido una corrección para 2008 R2 RTM, 2008 o 2005.
Lo sentimos. Yo votaré el resto. –