انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری

نسخه‌ی کامل: توابع بازگشتی در SQL Server
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
در اینجا یک مثال از تابع بازگشتی در SQL Server آورده شده است که یک دنباله فیبوناچی تولید می‌کند:

کد:
CREATE FUNCTION Fibonacci( @n INT )
RETURNS TABLE
AS
RETURN
(
SELECT 0 AS n
UNION ALL
SELECT 1 AS n
UNION ALL
SELECT Fibonacci(@n - 1) + Fibonacci(@n - 2) AS n
FROM Fibonacci( @n - 1 )
);

این تابع دو پارامتر ورودی دارد: @n که تعداد عناصر دنباله را مشخص می‌کند.
تابع از دو عبارت UNION ALL استفاده می‌کند تا یک دنباله از عناصر دنباله فیبوناچی تولید کند. اولین عبارت UNION ALL دو عدد 0 و 1 را به دنباله اضافه می‌کند. عبارت دوم UNION ALL از نتیجه تابع بازگشتی خود برای تولید بقیه عناصر دنباله استفاده می‌کند.
در اینجا مثالی از نحوه استفاده از این تابع آورده شده است:


کد:
SELECT * FROM Fibonacci( 10 );

این کوئری خروجی زیر را تولید می‌کند:

نقل قول: n
-------
0
1
1
2
3
5
8
13
21
34
تابع بازگشتی در SQL Server یک راه قدرتمند برای تولید دنباله‌های تکراری است. این تابع می‌تواند برای تولید دنباله‌های فیبوناچی، دنباله‌های هندسی، و سایر دنباله‌های تکراری استفاده شود.
در اینجا یک مثال دیگر از تابع بازگشتی در SQL Server آورده شده است که تمام اعداد زوج بین دو عدد داده شده را تولید می‌کند:

کد:
CREATE FUNCTION EvenNumbers( @start INT, @end INT )
RETURNS TABLE
AS
BEGIN
RETURN
(
SELECT @start AS n
UNION ALL
SELECT EvenNumbers(@start + 2, @end)
FROM EvenNumbers( @start + 2 )
WHERE @start + 2 <= @end
);
END;

این تابع دو پارامتر ورودی دارد: @start که اولین عدد زوج را مشخص می‌کند، و @end که آخرین عدد زوج را مشخص می‌کند.
تابع از یک عبارت UNION ALL استفاده می‌کند تا یک دنباله از اعداد زوج تولید کند. اولین عبارت UNION ALL اولین عدد زوج را به دنباله اضافه می‌کند. عبارت دوم UNION ALL از نتیجه تابع بازگشتی خود برای تولید بقیه اعداد زوج استفاده می‌کند.
در اینجا مثالی از نحوه استفاده از این تابع آورده شده است:

کد:
SELECT * FROM EvenNumbers( 2, 10 );

این کوئری خروجی زیر را تولید می‌کند:
نقل قول: n
-------
2
4
6
8
10

تابع بازگشتی در SQL Server یک راه قدرتمند برای تولید دنباله‌های تکراری است. این تابع می‌تواند برای تولید دنباله‌های اعداد زوج، اعداد فرد، اعداد اول، و سایر دنباله‌های تکراری استفاده شود.
در اینجا یک مثال دیگر از تابع بازگشتی در SQL Server آورده شده است که یک دنباله از اعداد اول تولید می‌کند:

کد:
CREATE FUNCTION PrimeNumbers( @n INT )
RETURNS TABLE
AS
BEGIN
DECLARE @i INT = 2;
DECLARE @prime TABLE(
  number INT
);

INSERT INTO @prime
SELECT @i;

WHILE (@i <= @n)
BEGIN
  DECLARE @j INT = 2;

  WHILE (@j * @j <= @i)
  BEGIN
    IF (@i % @j = 0)
    BEGIN
      DELETE FROM @prime WHERE number = @i;
      BREAK;
    END;

    @j = @j + 1;
  END;

  @i = @i + 1;
END;

RETURN
(
SELECT * FROM @prime
);
END;

این تابع یک جدول از اعداد اول را تولید می‌کند. تابع از یک حلقه while استفاده می‌کند تا از 1 تا @n بشمارد. برای هر عدد، تابع بررسی می‌کند که آیا عدد اول است یا خیر. اگر عدد اول نباشد، آن را از جدول حذف می‌کند. در اینجا مثالی از نحوه استفاده از این تابع آورده شده است:

کد:
SELECT * FROM PrimeNumbers( 100 );

این کوئری خروجی زیر را تولید می‌کند:
نقل قول: number
-------
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
تابع بازگشتی در SQL Server یک راه قدرتمند برای تولید مجموعه‌های تکراری است. این تابع می‌تواند برای تولید مجموعه‌های اعداد اول، مجموعه‌های اعداد زوج، و سایر مجموعه‌های تکراری استفاده شود.
اینجا یک مثال دیگر از یک تابع بازگشتی در SQL Server برای محاسبه مجموع اعداد از 1 تا n را دارید:

کد:
CREATE FUNCTION CalculateSum(@n INT)
RETURNS INT
AS
BEGIN
    -- Base Case
    IF @n <= 0
        RETURN 0;
    
    -- Recursive Case
    RETURN @n + dbo.CalculateSum(@n - 1);
END;
در این تابع، ما مجموع اعداد از 1 تا n را با استفاده از تابع بازگشتی محاسبه می‌کنیم. اگر عدد ورودی (@n) کمتر یا مساوی 0 باشد، تابع به عدد 0 برمی‌گردد که مثالی از مورد پایه (Base Case) است. در غیر این صورت، تابع به صورت بازگشتی خود را فراخوانی کرده و عدد @n را با نتیجه فراخوانی تابع با ورودی @n - 1 جمع می‌کند.
برای استفاده از این تابع، می‌توانید به شکل زیر استفاده کنید:

کد:
SELECT dbo.CalculateSum(5); -- مثال محاسبه مجموع اعداد از 1 تا 5
این تابع به شکل بازگشتی مجموع اعداد از 1 تا n را محاسبه می‌کند و می‌توانید آن را با ورودی‌های دلخواه استفاده کنید.
در اینجا مثال دیگری از یک تابع بازگشتی در SQL Server برای محاسبه اعداد تریبوناچی تا n ارائه می‌شود:

کد:
CREATE FUNCTION CalculateTribonacci(@n INT)
RETURNS INT
AS
BEGIN
    -- Base Case
    IF @n <= 0
        RETURN 0;
    IF @n = 1 OR @n = 2
        RETURN 1;
    
    -- Recursive Case
    RETURN dbo.CalculateTribonacci(@n - 1) + dbo.CalculateTribonacci(@n - 2) + dbo.CalculateTribonacci(@n - 3);
END;
در این تابع، ما اعداد تریبوناچی تا n را با استفاده از تابع بازگشتی محاسبه می‌کنیم. اگر عدد ورودی (@n) کمتر یا مساوی 0 باشد، تابع به عدد 0 برمی‌گردد (مثالی از مورد پایه). اگر @n برابر با 1 یا 2 باشد، تابع به عدد 1 برمی‌گردد (دو مورد پایه دیگر). در غیر این صورت، تابع به صورت بازگشتی خود را فراخوانی کرده و عدد @n را با مجموع نتایج سه فراخوانی تابع با ورودی @n - 1، @n - 2 و @n - 3 محاسبه می‌کند.
برای استفاده از این تابع، می‌توانید به شکل زیر استفاده کنید:
کد:
SELECT dbo.CalculateTribonacci(10); -- مثال محاسبه عدد تریبوناچی با ورودی 10
این تابع به شکل بازگشتی اعداد تریبوناچی را محاسبه می‌کند و می‌توانید آن را با ورودی‌های دلخواه استفاده کنید.
برای مثالی که با ورودی dbo.CalculateTribonacci(10) ارائه شده، خروجی تابع CalculateTribonacci برابر با مقدار تریبوناچی مربوط به عدد 10 خواهد بود. برای محاسبه این مقدار، می‌توانید تابع را به شکل زیر فراخوانی کنید:
کد:
SELECT dbo.CalculateTribonacci(10);
خروجی مورد انتظار برابر با مقدار تریبوناچی برای عدد 10 است. تریبوناچی یک دنباله عددی است که با اعداد 0، 0، 1، 1، 2، 4، 7، 13 و ... آغاز می‌شود. بنابراین، خروجی تابع برای ورودی 10 باید مقدار 149 باشد.
در اینجا یک مثال دیگر از تابع بازگشتی در SQL Server برای محاسبه توان عددی از یک عدد دلخواه را دارید:
کد:
CREATE FUNCTION CalculatePower(@base INT, @exponent INT)
RETURNS INT
AS
BEGIN
    -- Base Case
    IF @exponent = 0
        RETURN 1;
    
    -- Recursive Case
    RETURN @base * dbo.CalculatePower(@base, @exponent - 1);
END;
در این تابع، ما توان عددی از @base به توان @exponent را با استفاده از تابع بازگشتی محاسبه می‌کنیم. اگر @exponent برابر با 0 باشد، تابع به عدد 1 برمی‌گردد (مثالی از مورد پایه). در غیر این صورت، تابع به صورت بازگشتی خود را فراخوانی کرده و توان @base به توان @exponent - 1 را محاسبه می‌کند.

برای استفاده از این تابع، می‌توانید به شکل زیر استفاده کنید:

کد:
SELECT dbo.CalculatePower(2, 3); -- مثال محاسبه 2 به توان 3
این تابع به شکل بازگشتی توان عددی از یک عدد را محاسبه می‌کند و می‌توانید آن را با ورودی‌های دلخواه استفاده کنید. در مثال فوق، مقدار خروجی برابر با 8 است چرا که 2 به توان 3 برابر با 8 می‌شود.
لینک مرجع