Jawaban:
Saya selalu menggunakan nilai kembali untuk meneruskan status kesalahan. Jika Anda perlu mengembalikan satu nilai, saya akan menggunakan parameter output.
sampel prosedur tersimpan, dengan parameter OUTPUT:
CREATE PROCEDURE YourStoredProcedure
(
@Param1 int
,@Param2 varchar(5)
,@Param3 datetime OUTPUT
)
AS
IF ISNULL(@Param1,0)>5
BEGIN
SET @Param3=GETDATE()
END
ELSE
BEGIN
SET @Param3='1/1/2010'
END
RETURN 0
GO
panggilan ke prosedur tersimpan, dengan parameter OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
KELUARAN:
0
2010-01-01 00:00:00.000
Ini akan berfungsi jika Anda ingin mengembalikan integer:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
Dari dokumentasi (dengan asumsi Anda menggunakan SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Jadi ya, seharusnya seperti itu.
Saya memiliki pertanyaan yang sama. Meskipun ada jawaban bagus di sini, saya memutuskan untuk membuat fungsi nilai tabel. Dengan fungsi bernilai tabel (atau skalar), Anda tidak perlu mengubah proc yang disimpan. Saya hanya melakukan seleksi dari fungsi nilai tabel. Perhatikan bahwa parameter (MyParameter bersifat opsional).
CREATE FUNCTION [dbo].[MyDateFunction]
(@MyParameter varchar(max))
RETURNS TABLE
AS
RETURN
(
--- Query your table or view or whatever and select the results.
SELECT DateValue FROM MyTable WHERE ID = @MyParameter;
)
Untuk menetapkan ke variabel Anda, Anda cukup melakukan sesuatu seperti:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Anda juga dapat menggunakan fungsi bernilai skalar:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Maka Anda bisa melakukannya
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;