Aracılığıyla paylaş


Dönüş kodu kullanarak veri döndürme

Bir saklı yordam adı verilen bir yordamı yürütme durumunu gösteren bir dönüş kodu bir tamsayı değeri döndürebilir.return kullanarak bir saklı yordam için dönüş kodu belirtmek deyim.Çıkış Parametrelerde olduðu gibi dönüş kodu değeri arama programı kullanmak için saklı yordam çalıştırıldığında dönüş kodu bir değişkende kaydetmeniz gerekir.Örneğin, atama değişken @result veri türü int dönüş kodu saklamak için kullanılan saklı yordam my_proc, gibi:

DECLARE @result int;
EXECUTE @result = my_proc;

Dönüş kodları yaygın olarak kullanılan akış denetim blokları içinde saklı yordamlar için küme dönüş kodu değeri her olası hata durumu.Sonra @@ error işlev kullanabilirsiniz bir Transact-SQL ifadesine algılamak yürütülürken deyim. bir hata oluşup

Örnekler

A.Hata türüne göre farklı bir dönüş kodunu döndürerek

Aşağıdaki örnekte gösterildiği usp_GetSalesYTD yordam hata işleme, ayarlar özel dönüş kodu değerleri için çeşitli hatalar.Aşağıdaki tablo saklı yordamı her olası hata ve karşılık gelen anlamı her değer için atanan tamsayı değeri gösterir.

Dönüş kodu değeri

Anlamı

0

Yürütme başarılı.

1

Gerekli parametre değeri belirtilmemiş.

2

Belirtilen parametre değeri geçerli değil.

3

Satış değeri alınırken hata oluştu.

4

null satış değeri satış temsilcisi için bulundu.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('Sales.usp_GetSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.usp_GetSalesYTD;
GO
CREATE PROCEDURE Sales.usp_GetSalesYTD
@SalesPerson nvarchar(50) = NULL,  -- NULL default value
@SalesYTD money = NULL OUTPUT
AS  

-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
   BEGIN
       PRINT 'ERROR: You must specify a last name for the sales person.'
       RETURN(1)
   END
ELSE
   BEGIN
   -- Make sure the value is valid.
   IF (SELECT COUNT(*) FROM HumanResources.vEmployee
          WHERE LastName = @SalesPerson) = 0
      RETURN(2)
   END
-- Get the sales for the specified name and 
-- assign it to the output parameter.
SELECT @SalesYTD = SalesYTD 
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
WHERE LastName = @SalesPerson;
-- Check for SQL Server errors.
IF @@ERROR <> 0 
   BEGIN
      RETURN(3)
   END
ELSE
   BEGIN
   -- Check to see if the ytd_sales value is NULL.
     IF @SalesYTD IS NULL
       RETURN(4) 
     ELSE
      -- SUCCESS!!
        RETURN(0)
   END
-- Run the stored procedure without specifying an input value.
EXEC Sales.usp_GetSalesYTD;
GO
-- Run the stored procedure with an input value.
DECLARE @SalesYTDForSalesPerson money, @ret_code int;
-- Execute the procedure specifying a last name for the input parameter
-- and saving the output value in the variable @SalesYTD
EXECUTE Sales.usp_GetSalesYTD
    N'Blythe', @SalesYTD = @SalesYTDForSalesPerson OUTPUT;
PRINT N'Year-to-date sales for this employee is ' +
    CONVERT(varchar(10), @SalesYTDForSalesPerson);

B.Bir saklı yordam döndürülen farklı dönüş kodlarının yönetilmesi

Aşağıdaki örnek tarafından döndürülen dönüş kodları işlemek için bir program oluşturur usp_GetSalesYTD yordam.

-- Declare the variables to receive the output value and return code 
-- of the procedure.
DECLARE @SalesYTDForSalesPerson money, @ret_code int;

-- Execute the procedure with a title_id value
-- and save the output value and return code in variables.
EXECUTE @ret_code = Sales.usp_GetSalesYTD
    N'Blythe', @SalesYTD = @SalesYTDForSalesPerson OUTPUT;
--  Check the return codes.
IF @ret_code = 0
BEGIN
   PRINT 'Procedure executed successfully'
   -- Display the value returned by the procedure.
   PRINT 'Year-to-date sales for this employee is ' + CONVERT(varchar(10),@SalesYTDForSalesPerson)
END
ELSE IF @ret_code = 1
   PRINT 'ERROR: You must specify a last name for the sales person.'
ELSE IF @ret_code = 2 
   PRINT 'EERROR: You must enter a valid last name for the sales person.'
ELSE IF @ret_code = 3
   PRINT 'ERROR: An error occurred getting sales value.'
ELSE IF @ret_code = 4
   PRINT 'ERROR: No sales recorded for this employee.'   
GO