<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=SQL_Server%2FT-SQL_Tutorial%2FProcedure_Function%2FRecursive_function</id>
		<title>SQL Server/T-SQL Tutorial/Procedure Function/Recursive function - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://sqle.ru/index.php?action=history&amp;feed=atom&amp;title=SQL_Server%2FT-SQL_Tutorial%2FProcedure_Function%2FRecursive_function"/>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Procedure_Function/Recursive_function&amp;action=history"/>
		<updated>2026-04-06T03:38:37Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Procedure_Function/Recursive_function&amp;diff=7069&amp;oldid=prev</id>
		<title> в 13:46, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Procedure_Function/Recursive_function&amp;diff=7069&amp;oldid=prev"/>
				<updated>2010-05-26T13:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 13:46, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Procedure_Function/Recursive_function&amp;diff=7070&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://sqle.ru/index.php?title=SQL_Server/T-SQL_Tutorial/Procedure_Function/Recursive_function&amp;diff=7070&amp;oldid=prev"/>
				<updated>2010-05-26T10:25:16Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Implementing the fibonacci2() User-Defined Function with a Loop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
4&amp;gt; CREATE FUNCTION dbo.fibonacci2(&lt;br /&gt;
5&amp;gt;   @n AS int&lt;br /&gt;
6&amp;gt; )&lt;br /&gt;
7&amp;gt; RETURNS int&lt;br /&gt;
8&amp;gt; AS&lt;br /&gt;
9&amp;gt; BEGIN&lt;br /&gt;
10&amp;gt;   IF @n &amp;lt; 0&lt;br /&gt;
11&amp;gt;     RETURN NULL&lt;br /&gt;
12&amp;gt;   ELSE&lt;br /&gt;
13&amp;gt;     IF @n in (0, 1)&lt;br /&gt;
14&amp;gt;       RETURN @n&lt;br /&gt;
15&amp;gt;   ELSE&lt;br /&gt;
16&amp;gt;   BEGIN&lt;br /&gt;
17&amp;gt;     DECLARE&lt;br /&gt;
18&amp;gt;       @i AS int,&lt;br /&gt;
19&amp;gt;       @f AS int&lt;br /&gt;
20&amp;gt;     SET @i = @n&lt;br /&gt;
21&amp;gt;     SET @f = 0&lt;br /&gt;
22&amp;gt;     WHILE @i &amp;gt; 0&lt;br /&gt;
23&amp;gt;     BEGIN&lt;br /&gt;
24&amp;gt;       SET @f = @f + @i&lt;br /&gt;
25&amp;gt;       SET @i = @i - 1&lt;br /&gt;
26&amp;gt;     END -- loop while @i &amp;gt; 0&lt;br /&gt;
27&amp;gt;   END -- if @n &amp;gt; 0&lt;br /&gt;
28&amp;gt;   RETURN @f&lt;br /&gt;
29&amp;gt; END -- function&lt;br /&gt;
30&amp;gt; GO&lt;br /&gt;
1&amp;gt; --Invoking the Loop fibonacci2() User-Defined Function&lt;br /&gt;
2&amp;gt; SELECT dbo.fibonacci2(32) -- succeeds&lt;br /&gt;
3&amp;gt; SELECT dbo.fibonacci2(33) -- succeeds&lt;br /&gt;
4&amp;gt;&lt;br /&gt;
5&amp;gt; drop function dbo.fibonacci2&lt;br /&gt;
6&amp;gt; GO&lt;br /&gt;
-----------&lt;br /&gt;
        528&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
-----------&lt;br /&gt;
        561&lt;br /&gt;
(1 rows affected)&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Implementing the fibonacci() User-Defined Function with Recursion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
4&amp;gt; CREATE FUNCTION dbo.fibonacci(&lt;br /&gt;
5&amp;gt;   @n AS int&lt;br /&gt;
6&amp;gt; )&lt;br /&gt;
7&amp;gt; RETURNS int&lt;br /&gt;
8&amp;gt; AS&lt;br /&gt;
9&amp;gt; BEGIN&lt;br /&gt;
10&amp;gt;   RETURN CASE&lt;br /&gt;
11&amp;gt;             WHEN @n &amp;gt; 1 THEN @n + dbo.fibonacci(@n - 1) --recursive invocation&lt;br /&gt;
12&amp;gt;             WHEN @n IN (0, 1) THEN @n&lt;br /&gt;
13&amp;gt;             ELSE NULL&lt;br /&gt;
14&amp;gt;           END&lt;br /&gt;
15&amp;gt; END&lt;br /&gt;
16&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; --Invoking the Recursive fibonacci() User-Defined Function&lt;br /&gt;
3&amp;gt;&lt;br /&gt;
4&amp;gt; SELECT dbo.fibonacci(2) -- succeeds&lt;br /&gt;
5&amp;gt; GO&lt;br /&gt;
-----------&lt;br /&gt;
          3&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop function dbo.fibonacci&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== iterative solution does not have the restriction 32 nesting levels==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
6&amp;gt; CREATE PROC factorial2 @param1 int, @answer NUMERIC(38,0) OUTPUT&lt;br /&gt;
7&amp;gt; AS&lt;br /&gt;
8&amp;gt; DECLARE @counter int&lt;br /&gt;
9&amp;gt; IF (@param1 &amp;lt; 0 OR @param1 &amp;gt; 33)&lt;br /&gt;
10&amp;gt;     BEGIN&lt;br /&gt;
11&amp;gt;         RAISERROR (&amp;quot;Illegal Parameter Value. Must be between 0 and 33&amp;quot;,&lt;br /&gt;
12&amp;gt;             16, -1)&lt;br /&gt;
13&amp;gt;         RETURN -1&lt;br /&gt;
14&amp;gt;     END&lt;br /&gt;
15&amp;gt;&lt;br /&gt;
16&amp;gt; SET @counter=1 SET @answer=1&lt;br /&gt;
17&amp;gt;&lt;br /&gt;
18&amp;gt; WHILE (@counter &amp;lt; @param1 AND @param1 &amp;lt;&amp;gt; 0 )&lt;br /&gt;
19&amp;gt;     BEGIN&lt;br /&gt;
20&amp;gt;         SET @answer=@answer * (@counter + 1)&lt;br /&gt;
21&amp;gt;         SET @counter=@counter + 1&lt;br /&gt;
22&amp;gt;     END&lt;br /&gt;
23&amp;gt;&lt;br /&gt;
24&amp;gt; RETURN&lt;br /&gt;
25&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; DECLARE @answer numeric(38, 0), @param int&lt;br /&gt;
3&amp;gt; SET @param=0&lt;br /&gt;
4&amp;gt; WHILE (@param &amp;lt;= 32)&lt;br /&gt;
5&amp;gt;     BEGIN&lt;br /&gt;
6&amp;gt;         EXEC factorial2 @param, @answer OUTPUT&lt;br /&gt;
7&amp;gt;         PRINT CONVERT(varchar(50), @param) + &amp;quot;! = &amp;quot;&lt;br /&gt;
8&amp;gt;             + CONVERT(varchar(50), @answer)&lt;br /&gt;
9&amp;gt;         SET @param=@param + 1&lt;br /&gt;
10&amp;gt;     END&lt;br /&gt;
11&amp;gt; GO&lt;br /&gt;
0! = 1&lt;br /&gt;
1! = 1&lt;br /&gt;
2! = 2&lt;br /&gt;
3! = 6&lt;br /&gt;
4! = 24&lt;br /&gt;
5! = 120&lt;br /&gt;
6! = 720&lt;br /&gt;
7! = 5040&lt;br /&gt;
8! = 40320&lt;br /&gt;
9! = 362880&lt;br /&gt;
10! = 3628800&lt;br /&gt;
11! = 39916800&lt;br /&gt;
12! = 479001600&lt;br /&gt;
13! = 6227020800&lt;br /&gt;
14! = 87178291200&lt;br /&gt;
15! = 1307674368000&lt;br /&gt;
16! = 20922789888000&lt;br /&gt;
17! = 355687428096000&lt;br /&gt;
18! = 6402373705728000&lt;br /&gt;
19! = 121645100408832000&lt;br /&gt;
20! = 2432902008176640000&lt;br /&gt;
21! = 51090942171709440000&lt;br /&gt;
22! = 1124000727777607680000&lt;br /&gt;
23! = 25852016738884976640000&lt;br /&gt;
24! = 620448401733239439360000&lt;br /&gt;
25! = 15511210043330985984000000&lt;br /&gt;
26! = 403291461126605635584000000&lt;br /&gt;
27! = 10888869450418352160768000000&lt;br /&gt;
28! = 304888344611713860501504000000&lt;br /&gt;
29! = 8841761993739701954543616000000&lt;br /&gt;
30! = 265252859812191058636308480000000&lt;br /&gt;
31! = 8222838654177922817725562880000000&lt;br /&gt;
32! = 263130836933693530167218012160000000&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop PROC factorial2;&lt;br /&gt;
3&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Nesting Stored Procedures==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
A stored procedure cannot be nested more than 32 levels deep.&lt;br /&gt;
You can test how far down you are by checking the value of the @@NESTLEVEL function.&lt;br /&gt;
25&amp;gt; CREATE TABLE employee(&lt;br /&gt;
26&amp;gt;    id          INTEGER NOT NULL PRIMARY KEY,&lt;br /&gt;
27&amp;gt;    first_name  VARCHAR(10),&lt;br /&gt;
28&amp;gt;    last_name   VARCHAR(10),&lt;br /&gt;
29&amp;gt;    salary      DECIMAL(10,2),&lt;br /&gt;
30&amp;gt;    start_Date  DATETIME,&lt;br /&gt;
31&amp;gt;    region      VARCHAR(10),&lt;br /&gt;
32&amp;gt;    city        VARCHAR(20),&lt;br /&gt;
33&amp;gt;    managerid   INTEGER&lt;br /&gt;
34&amp;gt; );&lt;br /&gt;
35&amp;gt; GO&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (1, &amp;quot;Jason&amp;quot; ,  &amp;quot;Martin&amp;quot;, 5890,&amp;quot;2005-03-22&amp;quot;,&amp;quot;North&amp;quot;,&amp;quot;Vancouver&amp;quot;,3);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (2, &amp;quot;Alison&amp;quot;,  &amp;quot;Mathews&amp;quot;,4789,&amp;quot;2003-07-21&amp;quot;,&amp;quot;South&amp;quot;,&amp;quot;Utown&amp;quot;,4);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (3, &amp;quot;James&amp;quot; ,  &amp;quot;Smith&amp;quot;,  6678,&amp;quot;2001-12-01&amp;quot;,&amp;quot;North&amp;quot;,&amp;quot;Paris&amp;quot;,5);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (4, &amp;quot;Celia&amp;quot; ,  &amp;quot;Rice&amp;quot;,   5567,&amp;quot;2006-03-03&amp;quot;,&amp;quot;South&amp;quot;,&amp;quot;London&amp;quot;,6);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (5, &amp;quot;Robert&amp;quot;,  &amp;quot;Black&amp;quot;,  4467,&amp;quot;2004-07-02&amp;quot;,&amp;quot;East&amp;quot;,&amp;quot;Newton&amp;quot;,7);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (6, &amp;quot;Linda&amp;quot; ,  &amp;quot;Green&amp;quot; , 6456,&amp;quot;2002-05-19&amp;quot;,&amp;quot;East&amp;quot;,&amp;quot;Calgary&amp;quot;,8);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (7, &amp;quot;David&amp;quot; ,  &amp;quot;Larry&amp;quot;,  5345,&amp;quot;2008-03-18&amp;quot;,&amp;quot;West&amp;quot;,&amp;quot;New York&amp;quot;,9);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (8, &amp;quot;James&amp;quot; ,  &amp;quot;Cat&amp;quot;,    4234,&amp;quot;2007-07-17&amp;quot;,&amp;quot;West&amp;quot;,&amp;quot;Regina&amp;quot;,9);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt; INSERT INTO employee VALUES (9, &amp;quot;Joan&amp;quot;  ,  &amp;quot;Act&amp;quot;,    6123,&amp;quot;2001-04-16&amp;quot;,&amp;quot;North&amp;quot;,&amp;quot;Toronto&amp;quot;,10);&lt;br /&gt;
2&amp;gt; GO&lt;br /&gt;
(1 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; select * from employee;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
id          first_name last_name  salary       start_Date              region     city                 managerid&lt;br /&gt;
----------- ---------- ---------- ------------ ----------------------- ---------- -------------------- -----------&lt;br /&gt;
          1 Jason      Martin          5890.00 2005-03-22 00:00:00.000 North      Vancouver                      3&lt;br /&gt;
          2 Alison     Mathews         4789.00 2003-07-21 00:00:00.000 South      Utown                          4&lt;br /&gt;
          3 James      Smith           6678.00 2001-12-01 00:00:00.000 North      Paris                          5&lt;br /&gt;
          4 Celia      Rice            5567.00 2006-03-03 00:00:00.000 South      London                         6&lt;br /&gt;
          5 Robert     Black           4467.00 2004-07-02 00:00:00.000 East       Newton                         7&lt;br /&gt;
          6 Linda      Green           6456.00 2002-05-19 00:00:00.000 East       Calgary                        8&lt;br /&gt;
          7 David      Larry           5345.00 2008-03-18 00:00:00.000 West       New York                       9&lt;br /&gt;
          8 James      Cat             4234.00 2007-07-17 00:00:00.000 West       Regina                         9&lt;br /&gt;
          9 Joan       Act             6123.00 2001-04-16 00:00:00.000 North      Toronto                       10&lt;br /&gt;
(9 rows affected)&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt;&lt;br /&gt;
4&amp;gt; CREATE PROC usp_FindBoss(&lt;br /&gt;
5&amp;gt;   @EmployeeID int&lt;br /&gt;
6&amp;gt; )&lt;br /&gt;
7&amp;gt; AS&lt;br /&gt;
8&amp;gt; DECLARE&lt;br /&gt;
9&amp;gt;   @ReportsTo int&lt;br /&gt;
10&amp;gt; SELECT&lt;br /&gt;
11&amp;gt;   @ReportsTo = managerid&lt;br /&gt;
12&amp;gt; FROM&lt;br /&gt;
13&amp;gt;     Employee&lt;br /&gt;
14&amp;gt; WHERE&lt;br /&gt;
15&amp;gt;     Id = @EmployeeID&lt;br /&gt;
16&amp;gt; IF @ReportsTo IS NOT NULL AND @@NESTLEVEL &amp;lt;= 32&lt;br /&gt;
17&amp;gt; BEGIN&lt;br /&gt;
18&amp;gt;   SELECT&lt;br /&gt;
19&amp;gt;     @EmployeeID AS Employee,&lt;br /&gt;
20&amp;gt;     @ReportsTo  AS Manager&lt;br /&gt;
21&amp;gt;   EXEC usp_FindBoss&lt;br /&gt;
22&amp;gt;     @ReportsTo&lt;br /&gt;
23&amp;gt; END&lt;br /&gt;
24&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop procedure usp_FindBoss&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; drop table employee;&lt;br /&gt;
4&amp;gt; GO&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Recursively call itself==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
2&amp;gt; CREATE PROC factorial @param1 decimal(38,0), @answer decimal(38,0) output&lt;br /&gt;
3&amp;gt; AS&lt;br /&gt;
4&amp;gt; DECLARE @one_less decimal(38,0), @status int&lt;br /&gt;
5&amp;gt;&lt;br /&gt;
6&amp;gt; IF (@param1 &amp;lt; 0 OR @param1 &amp;gt; 32)&lt;br /&gt;
7&amp;gt;     BEGIN&lt;br /&gt;
8&amp;gt;         -- Illegal parameter value. Must be between 0 and 32.&lt;br /&gt;
9&amp;gt;         RETURN -1&lt;br /&gt;
10&amp;gt;     END&lt;br /&gt;
11&amp;gt;&lt;br /&gt;
12&amp;gt; IF (@param1=0 or @param1=1)&lt;br /&gt;
13&amp;gt;     SET @answer=1&lt;br /&gt;
14&amp;gt; ELSE&lt;br /&gt;
15&amp;gt;     BEGIN&lt;br /&gt;
16&amp;gt;         SET @one_less=@param1 - 1&lt;br /&gt;
17&amp;gt;         EXEC @status=factorial @one_less, @answer output&lt;br /&gt;
18&amp;gt;         &lt;br /&gt;
19&amp;gt;         IF (@status= -1)&lt;br /&gt;
20&amp;gt;             BEGIN&lt;br /&gt;
21&amp;gt;                 RETURN -1&lt;br /&gt;
22&amp;gt;             END&lt;br /&gt;
23&amp;gt;&lt;br /&gt;
24&amp;gt;         SET @answer=@answer * @param1&lt;br /&gt;
25&amp;gt;&lt;br /&gt;
26&amp;gt;         IF (@@ERROR &amp;lt;&amp;gt; 0)&lt;br /&gt;
27&amp;gt;             RETURN -1&lt;br /&gt;
28&amp;gt;     END&lt;br /&gt;
29&amp;gt;&lt;br /&gt;
30&amp;gt; RETURN  0&lt;br /&gt;
31&amp;gt; GO&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt;&lt;br /&gt;
3&amp;gt; DECLARE @answer decimal(38,0), @param int&lt;br /&gt;
4&amp;gt; SET @param=0&lt;br /&gt;
5&amp;gt; WHILE (@param &amp;lt;= 32) BEGIN&lt;br /&gt;
6&amp;gt;     EXEC  factorial  @param, @answer output&lt;br /&gt;
7&amp;gt;     IF (@answer= -1)&lt;br /&gt;
8&amp;gt;         BEGIN&lt;br /&gt;
9&amp;gt;             RAISERROR(&amp;quot;Error executing factorial procedure.&amp;quot;, 16, -1)&lt;br /&gt;
10&amp;gt;             RETURN&lt;br /&gt;
11&amp;gt;         END&lt;br /&gt;
12&amp;gt;     PRINT CONVERT(varchar, @param) + &amp;quot;! = &amp;quot; + CONVERT(varchar(50), @answer)&lt;br /&gt;
13&amp;gt;     SET @param=@param + 1&lt;br /&gt;
14&amp;gt; END&lt;br /&gt;
15&amp;gt; GO&lt;br /&gt;
0! = 1&lt;br /&gt;
1! = 1&lt;br /&gt;
2! = 2&lt;br /&gt;
3! = 6&lt;br /&gt;
4! = 24&lt;br /&gt;
5! = 120&lt;br /&gt;
6! = 720&lt;br /&gt;
7! = 5040&lt;br /&gt;
8! = 40320&lt;br /&gt;
9! = 362880&lt;br /&gt;
10! = 3628800&lt;br /&gt;
11! = 39916800&lt;br /&gt;
12! = 479001600&lt;br /&gt;
13! = 6227020800&lt;br /&gt;
14! = 87178291200&lt;br /&gt;
15! = 1307674368000&lt;br /&gt;
16! = 20922789888000&lt;br /&gt;
17! = 355687428096000&lt;br /&gt;
18! = 6402373705728000&lt;br /&gt;
19! = 121645100408832000&lt;br /&gt;
20! = 2432902008176640000&lt;br /&gt;
21! = 51090942171709440000&lt;br /&gt;
22! = 1124000727777607680000&lt;br /&gt;
23! = 25852016738884976640000&lt;br /&gt;
24! = 620448401733239439360000&lt;br /&gt;
25! = 15511210043330985984000000&lt;br /&gt;
26! = 403291461126605635584000000&lt;br /&gt;
27! = 10888869450418352160768000000&lt;br /&gt;
28! = 304888344611713860501504000000&lt;br /&gt;
29! = 8841761993739701954543616000000&lt;br /&gt;
30! = 265252859812191058636308480000000&lt;br /&gt;
31! = 8222838654177922817725562880000000&lt;br /&gt;
32! = 263130836933693530167218012160000000&lt;br /&gt;
1&amp;gt;&lt;br /&gt;
2&amp;gt; drop PROC factorial;&lt;br /&gt;
3&amp;gt; GO&lt;br /&gt;
1&amp;gt;&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>