• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQL Server 2005使用关系数据库存储CFG_sqlserver

sqlserver 搞代码 3年前 (2018-06-17) 156次浏览 已收录 0个评论

本文介绍的是用关系数据库来存储CFG(控制流程图)的信息。在查询时,为了得到所有dominate关系的结果,使用了CTE来进行递归查询。

简单例子如下:

1. 现有表testRe结构如下

SQL Server 2005使用关系数据库存储CFG

2. 欲得到的查询结果为找到id=’a’的项的所有pId,即b、c、d。

3. 使用CTE做递归查询:

 WITH Re_CTE(id, pId, Level) Technorati 标签: sql server,CTE,递归,查询 AS  (      SELECT  id, pId, 1 AS [Level]      FROM  testRe      WHERE id='a'       UNION ALL      SELECT  t.id, t.pId, [Level] + 1      FROM  testRe t  INNER JOIN Re_CTE ct      ON t.id=ct.pId  )  SELECT * FROM Re_CTE

其中,Level为可选项

4. 查询结果为:

SQL Server 2005使用关系数据库存储CFG

5. CTE的简单说明(参考MSDNhttp://msdn.microsoft.com/zh-cn/library/ms186243%28SQL.90%29.ASPx):

 WITH cte_name(column_name [,...n])  AS  (  CTE_query_definition –- Anchor member is defined.  UNION ALL  CTE_query_definition –- Recursive member is defined referencing cte_name.  )  -- Statement using the CTE  SELECT *  FROM cte_name

一个递归 CTE 结构必须至少包含一个定位点成员和一个递归成员。

执行时:

将 CTE 表达式拆分为定位点成员和递归成员。

运行定位点成员,创建第一个调用或基准结果集 (T0)。

运行递归成员,将 Ti 作为输入,将 Ti+1 作为输出。

重复步骤 3,直到返回空集。

返回结果集。这是对 T0 到 Tn 执行 UNION ALL 的结果。

欢迎大家阅读《SQL Server 2005使用关系数据库存储CFG_sqlserver》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址