Câu trả lời:
Tôi luôn sử dụng giá trị trả về để chuyển lại trạng thái lỗi. Nếu bạn cần trả lại một giá trị, tôi sẽ sử dụng một tham số đầu ra.
quy trình lưu trữ mẫu, với tham số 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
gọi thủ tục đã lưu trữ, với tham số OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
ĐẦU RA:
0
2010-01-01 00:00:00.000
Điều này sẽ hoạt động nếu bạn chỉ muốn trả về một số nguyên:
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
Từ tài liệu (giả sử rằng bạn sử dụng SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Vì vậy, có, nó sẽ hoạt động theo cách đó.
Tôi đã có cùng một câu hỏi. Mặc dù có những câu trả lời tốt ở đây, tôi quyết định tạo một hàm giá trị bảng. Với hàm có giá trị bảng (hoặc vô hướng), bạn không phải thay đổi proc đã lưu trữ của mình. Tôi chỉ đơn giản thực hiện một lựa chọn từ hàm có giá trị bảng. Lưu ý rằng tham số (MyParameter là tùy chọn).
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;
)
Để gán cho biến của bạn, bạn chỉ có thể làm như sau:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Bạn cũng có thể sử dụng một hàm có giá trị vô hướng:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Sau đó, bạn có thể đơn giản làm
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;