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实现的递归编程是一种非常有用的工具,能够实现像循环、查询、累加等操作,有效提高程序性能,节省开发时间,从一步一步走向成功。


数据运维技术 » SQL Server实现的递归编程:以一步一步走向成功(sqlserver写递归)