SQL Server实现的递归编程:以一步一步走向成功(sqlserver写递归)
SQL Server实现的递归编程:以一步一步走向成功
SQL Server中的递归编程是使用SQL语句递归实现的。在SQL Server中递归编程的实现主要包括:SQL数据表级递归编程、SQL存储级递归编程和C#函数级递归编程三种方式,其中C#函数级递归编程比较简单,但是在性能上比SQL编程差,故通常用SQL进行递归编程。
首先介绍SQL数据表级递归编程,所谓SQL数据表级递归编程是指使用特定的SQL语句从某一表的某一行开始遍历一组数据表,根据数据表中的内容处理数据,从而获得我们想要的结果。举个例子,比如说我们想查询每一系统中各个层级状态,设计如下表格:
StateID | TargetlevelID | Level
——————————
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
2 | 1 | 1
2 | 2 | 2
我们可以采用SQL数据表级递归编程,实现StateID为1时TargetlevelID从1到3,StateID为2时TargetlevelID从1到2。采用SQL语句实现的方式如下:
SELECT *
FROM TableA
WHERE TargetlevelID =
(
SELECT MIN(TargetlevelID)
FROM TableA
WHERE TargetlevelID >
(
SELECT COALESCE(MAX(TargetlevelID), 0)
FROM TableA
WHERE StateID = 1
)
)
AND StateID = 1;
其次是SQL存储级递归编程,SQL存储级递归编程是指将一个SQL存储过程的参数设置为可变的,从而实现当调用SQL存储过程时,每次调用参数都能够发生变化,从而实现SQL语句遍历表中的每一行,或者以某个条件停止递归,来达到重复计算的目的。
举个栗子,我们要查询数据表中所有给定状态的所有TargetlevelID下的最大Level,采用SQL存储级递归编程,实现语句如下:
CREATE PROCEDURE dbo.Max_Level
@StateID INT
AS
DECLARE @Max INT
SELECT @Max = MAX(Level)
FROM TableA
WHERE TargetlevelID = @StateID
IF @Max is not NULL
RETURN @Max
ELSE
EXEC dbo.Max_Level @StateID – l
GO
EXEC dbo.Max_Level @StateID
最后介绍的是C#函数级递归编程,C#函数级递归编程是指在编写C#程序时,将C#函数的参数逐次变更从而实现函数调用,实现相同的功能。
举个栗子,比如说要求查询某个数据表中满足某一条件的所有行数据,例如上面提到的StateID为1时TargetlevelID从1到3,StateID为2时TargetlevelID从1到2,使用C#函数级编程的实现代码如下:
public List queryDataTable(int StateId){
List list = new List();
for(int i = 0; i
list.add(queryDataTable(StateId, i));
}
return list;
}
private int queryDataTable(int StateId, int TargetlevelId){
//query data table and return the result
}
通过以上的介绍,可以看出SQL Server实现的递归编程是一种非常有用的工具,能够实现像循环、查询、累加等操作,有效提高程序性能,节省开发时间,从一步一步走向成功。