sql >> Database >  >> RDS >> Sqlserver

Return Output Param van een opgeslagen procedure binnen een andere opgeslagen procedure

Als dit niet echt een probleem met de uitvoerparameter is, maar eerder een resultaatset, neem dan aan dat SpWithOutputID doet zoiets als dit (retourneert een SELECT met een enkele rij en enkele kolom):

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Dan Test1 zou er zo uit kunnen zien:

CREATE PROCEDURE dbo.Test1
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ID INT;

    CREATE TABLE #x(ID INT);

    INSERT #x EXEC dbo.SpWithOutputID;

    SELECT TOP (1) @ID = ID FROM #x;

    DROP TABLE #x;
END
GO

Maar vind je dat niet erg rommelig? Het zou echt zo moeten werken voor enkele, scalaire waarden:

CREATE PROCEDURE dbo.SpWithOutputID
    @ID INT OUTPUT 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @ID = 4; 
END 
GO

Nu is het veel eenvoudiger om te consumeren wat nu echt een uitvoerparameter is:

CREATE PROCEDURE dbo.Test1
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @ID INT;

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO



  1. .NET API voor SQL Server Service Broker

  2. Kan PostgreSQL's 11 Stored Procedure niet aanroepen met Hibernate

  3. Controleer de status van de database-e-mailwachtrijen in SQL Server (T-SQL)

  4. ValueError:kan DatetimeIndex niet casten naar dtype datetime64 [us]