Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ausgabeparameter einer gespeicherten Prozedur innerhalb einer anderen gespeicherten Prozedur zurückgeben

Wenn dies überhaupt kein Problem mit Ausgabeparametern ist, sondern eher eine Ergebnismenge, dann raten Sie, dass SpWithOutputID macht so etwas (gibt ein SELECT zurück mit einer einzigen Zeile und einer einzigen Spalte):

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Dann Test1 könnte so aussehen:

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

Aber sieht das nicht wirklich chaotisch für Sie aus? Für einzelne, skalare Werte sollte es wirklich so funktionieren:

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

    SELECT @ID = 4; 
END 
GO

Jetzt ist es viel einfacher zu konsumieren, was jetzt wirklich ein Ausgabeparameter ist:

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

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO