Jika ini sama sekali bukan masalah parameter keluaran, melainkan kumpulan hasil, maka tebak SpWithOutputID
melakukan sesuatu seperti ini (mengembalikan SELECT
dengan satu baris dan satu kolom):
CREATE PROCEDURE dbo.SpWithOutputID
AS
BEGIN
SET NOCOUNT ON;
SELECT ID = 4;
END
GO
Kemudian Test1
bisa terlihat seperti ini:
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
Tapi bukankah itu terlihat sangat berantakan bagimu? Ini benar-benar harus bekerja dengan cara ini untuk nilai skalar tunggal:
CREATE PROCEDURE dbo.SpWithOutputID
@ID INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ID = 4;
END
GO
Sekarang jauh lebih mudah untuk menggunakan apa yang sebenarnya merupakan parameter keluaran sekarang:
CREATE PROCEDURE dbo.Test1
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ID INT;
EXEC dbo.SpWithOutputID @ID = @ID OUTPUT;
SELECT @ID;
END
GO