Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả về thông số đầu ra của một thủ tục đã lưu trữ bên trong một thủ tục đã lưu trữ khác

Nếu đây thực sự không phải là vấn đề tham số đầu ra mà là tập hợp kết quả, thì hãy đoán rằng SpWithOutputID thực hiện một cái gì đó như thế này (trả về một SELECT với một hàng và một cột):

CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ID = 4;
END
GO

Sau đó, Test1 có thể trông như thế này:

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

Nhưng điều đó có thực sự lộn xộn với bạn không? Nó thực sự sẽ hoạt động theo cách này cho các giá trị đơn lẻ, vô hướng:

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

    SELECT @ID = 4; 
END 
GO

Giờ đây, việc sử dụng thông số đầu ra thực sự là đơn giản hơn nhiều:

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. Làm thế nào để lưu trữ cấu trúc thư mục / phân cấp / cây trong cơ sở dữ liệu?

  2. Giải pháp cho DATEDIFF () Bỏ qua SET DATEFIRST trong SQL Server (Ví dụ T-SQL)

  3. Xóa dấu chấm và dấu phẩy khỏi giá trị cột

  4. Làm cách nào để nhận các giá trị tham số cho truy vấn SQL Server trong SQL Server Profiler

  5. Chèn hàng loạt SQL Server - Phần 1