Yanıtlar:
Hata durumunu geri almak için her zaman dönüş değerini kullanırım. Bir değeri geri vermeniz gerekirse, bir çıktı parametresi kullanırdım.
ÇIKIŞ parametresi ile örnek saklı prosedür:
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
ÇIKIŞ parametresiyle saklı yordamı çağırın:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
ÇIKTI:
0
2010-01-01 00:00:00.000
Bu, bir tam sayı döndürmek isterseniz işe yarar:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
sadece bir örnektir, RETURN
yalnızca tamsayı değerleriyle çalışmak üzere tasarlanmıştır, dokümanlara bakın . Bir SP'den diğer verileri almanın önerilen yolu, bir sonuç kümesi döndürmek veya kullanmaktırOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
Gönderen belgelerinde (SQL-Server kullanmak varsayarak):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Yani evet, bu şekilde çalışmalı.
Ben de aynı soruyu sordum. Burada iyi cevaplar olsa da, tablo değerli bir fonksiyon oluşturmaya karar verdim. Tablo (veya skaler) değerli bir işlevle, depolanan proc'unuzu değiştirmeniz gerekmez. Tablo değerli işlevden basitçe bir seçim yaptım. Parametrenin (MyParameter isteğe bağlıdır) olduğunu unutmayı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;
)
Değişkeninize atamak için aşağıdaki gibi bir şey yapabilirsiniz:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Ayrıca skaler değerli bir işlev de kullanabilirsiniz:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
O zaman basitçe yapabilirsin
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;