Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć parametr wyjściowy procedury składowanej wewnątrz innej procedury składowanej

Jeśli tak naprawdę nie jest to w ogóle problem z parametrem wyjściowym, ale raczej zestaw wyników, zgadnij, że SpWithOutputID robi coś takiego (zwraca SELECT z jednym wierszem i jedną kolumną):

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Następnie Test1 może wyglądać tak:

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

Ale czy nie wygląda to na naprawdę bałaganiarski? To naprawdę powinno działać w ten sposób dla pojedynczych wartości skalarnych:

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

    SELECT @ID = 4; 
END 
GO

Teraz znacznie łatwiej jest wykorzystać to, co jest naprawdę parametrem wyjściowym:

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

    EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;

    SELECT @ID;
END
GO



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać instrukcji case w funkcji skalarnej w SQL?

  2. EXEC do użycia bazy danych

  3. Jak przekazać parametr do zapytania mssql w węźle js

  4. Kod stanu błędu strony internetowej SSRS 500

  5. Prosta próbka Pivot