/*
--2010-05-27(东升)
SQL SERVER 2008 新数据库类型hierarchyid
SQL SERVER 2008引入了新的hierarchyid数据类型,可以用它来做本地存储并且在树层次
结构中管理其位置.只用这个函数能简洁地表示层次结构中的位置.该函数提供的一些内置的函
数方法可以操作和遍历层次结构,使得存储和查询分层数据更为容易,而不需要像那样通过
CTE递归来获得.
该类型其实是一个CLR自定义数据类型依次打开:数据库->系统数据库->master->可编程性
->类型->系统数据类型->CLR数据类型->hierarchyid,可以看到该数据类型.
于hierarchyid有关的一些函数主要有:
GetAncestor :取得某一个级别的祖先
GetDescendant :取得某一个级别的子代
GetLevel :取得级别
GetRoot :取得根
IsDescendantOf :判断某个节点是否为某个节点的子代
Parse :将字符串转换为hierarchyid。该字符串的格式通常都是/1/这样的
Read :Read 从传入的BinaryReader 读取SqlHierarchyId 的二进制表示形式,并将
SqlHierarchyId 对象设置为该值。不能使用Transact-SQL 调用Read。请改
为使用CAST 或CONVERT。
GetReparentedValue :可以用来移动节点(或者子树)
ToString :将hierarchyid转换为字符串,与parse正好相反
Write : 将SqlHierarchyId 的二进制表示形式写出到传入的BinaryWriter 中。无法通
过使用Transact-SQL 来调用Write。请改为使用CAST 或CONVERT。
以下就该新类型做一些演示
*/
USE TESTDB
GO
CREATE TABLE TEST(
[PHASE] hierarchyid NOT NULL,
LVL AS [PHASE].GetLevel(),
USERID INT NOT NULL,
USERNAME VARCHAR(50) NOT NULL
)
--接着插入一个根
INSERT TEST([PHASE],USERID,USERNAME)
VALUES('/',1001,'东升')--'/'被用来表示层次的根,会自动转换成二进制格式
SELECT * FROM TEST
/* 结果
PHASE LVL USERID USERNAME
------ ------ --------- ----------
0x 0 1001 东升
(1 行受影响)
查询后应该发现'/'被重新定义成x十六进制值.
使用斜杠字符来表示层次路径,一个表示的是根,用斜杠分隔的整数值来组成连续的层次.
插入小弟
*/
INSERT TEST([PHASE],USERID,USERNAME)
VALUES('/1/',1002,'土豆')
INSERT TEST([PHASE],USERID,USERNAME)
VALUES('/2/',1003,'红太狼')
--以上条数据时同级别的
SELECT * FROM TEST
/*
PHASE LVL USERID USERNAME
------- ------ --------- -----------
0x 0 1001 东升
0x58 1 1002 土豆
0x68 1 1003 红太狼
(3 行受影响)
*/
--同样可以使用GetDescendant方法来填充[PHASE]
DECLARE @PARENTPHASE hierarchyid, @Child1 hierarchyid
SELECT @PARENTPHASE= CONVERT(hierarchyid,'/1/')
INSERT TEST([PHASE],USERID,USERNAME)
详细解决方案
SQL SERVER 2008 新数据库门类hierarchyid
热度:102 发布时间:2016-04-24 19:05:18.0
相关解决方案
- myeclipse联接sql server 2008看不到用户表
- 在哪找的SQL Server 2005数据库驱动文件?为什么sql server2005安装盘上面没有找到
- ASP上Set GetSession("conn")=server.CreateObject("adodb.connection")
- SOS-(奇怪现象)服务器暂不可用500 internal server error,该怎么解决
- sql server 设置非空默认值之后,hibernate添加出现异常
- 可以安装在win7系统的sql server
- exchange server 2000提供全部用户邮件到达的java api吗
- IM聊天系统的有关问题,用Tigase Server 如何实现挤线功能
- com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。该用户与可托 SQL Server
- 如何用JDBC将一个文件夹里的东西存储进sql server
- 关于SQL SERVER 2005里面的image类型解决方案
- visual studio 2008 创设对话框类以后,在加入成员变量的时候,控件变量那部分是灰色的,无法选择控件变量,是什么原因呢
- IIS 筹建 TFS,访问<server>/tfs/web时说无权访问此页面,何解?
- visual studio 2008 创建对话框类以后,在加入成员变量的时候,控件变量那部分是灰色的,无法选择控件变量,是什么原因呢?该如何处理
- IIS 搭建 TFS,访问<server>/tfs/web时说无权访问此页面,何解?该怎么处理
- Server Error in '/' Application.解决方法
- sql server 2005 约束有关问题
- 给listbox和<INPUT id="xx" name="xx" runat="server"> 赋值有关问题
- Microsoft Team Foundation Server 2010 怎么备份数据
- 求个asp.net(C#)+sql server 2005写的小型论坛。该如何解决
- C# + SQL server +oracle QQ交流群142703980解决方法
- 装配vs2008时组件microsoft sql server compact 3.5 for devices无法安装!求解
- 安装vs2008时组件microsoft sql server compact 3.5 for devices无法安装!求解!解决办法
- vs2010里创建一个c++项目,在代码里输入“this->”后没有单出一个函数智能提示窗口? 小弟我这就没有啊 影响工作。 vc6.2003、2005、2008
- visual studio 2008 中出现的有关问题
- vc++ 2008 怎么实现调用webservice
- 求VC++ 2008 >> CLR >> Windows 窗体应用程序实例,该如何处理
- Visual C++ 2008 团队版如何查看内存啊
- C# 经过.ini或.txt文件连接sql server
- DELPHI +SQL SERVER 2005 掉线 急该如何处理