Distributed2:Linked Server Login 添加和删除
SQL Server提供了一个新的数据类型 HierarchyID,用来处理层次结构的数据,这个数据类型是系统内置的CLR数据类型,不需要专门激活 SQL/CLR 功能即可使用。当需要表示各值之间的嵌套关系,并且该关系可以采用顺序路径语法表达时,HierarchyID 非常有用。
create table dbo.emph2
(
idpath hierarchyid not null primary key,
id int not null,
parentid as idpath.GetAncestor(1) persisted foreign key references dbo.emph2(idpath),
descr varchar(100)
)
HierarchyID 数据类型的方法如下,CLR类型区分大小写。
| 方法 | 返回结果 | 参数值 | 用途 |
|---|---|---|---|
| GetAncestor | 代表父级或更高级元素顺序路径的 HierarchyID。 | 整数值,指明沿当前顺序路径向上遍历的级数。 | 找出顺序路径中此实例的父级、祖父级或更高级别的元素。 |
| GetDescendent | HierarchyID,代表当前节点的子节点、孙子节点或更低级别子孙节点的路径。 | 两个 HierarchyID 实例,其中一个可以为 null 或者两者都为 null,用于限制可能返回的子项。 | 获取路径,以便在当前顺序路径中某个深度处插入新元素。 |
| GetLevel | 16 位整数值,代表顺序路径的总深度。 | 无。 | 确定两条顺序路径是否具有相同的深度。 |
| GetRoot | 具有零个元素的顺序路径的 HierarchyID。 | 无。 | 找出任意顺序路径的绝对根。 |
| IsDescendantOf | 如果作为参数传入的顺序路径是调用实例的子项,则返回 1。 | HierarchyID 实例。 | 确定给定的 HierarchyID 是否是另一个实例的子项。 |
| Parse | HierarchyID 实例。 | 顺序路径的文本表示。 | 从给定的路径创建 HierarchyID 实例。当 HierarchyID 实例设置为字符串时将隐式调用此方法。 |
| GetReparentedValue | 在将当前项目从一条路径移动到另一条路径时,代表完整顺序路径的 HierarchyID。 | 当前顺序路径表示为 HierarchyID,且目标顺序路径也表示为 HierarchyID。 | 将一行或多行值从一条父顺序路径移动到另一条父顺序路径。 |
| ToString | HierarchyID 顺序路径的文本表示。 | 无。 | 分析 HierarchyID 的顺序路径。 |
GetRoot是个静态方法,在Server sql 可以通过类型直接调用,Root 其实是一个字符 '\',HierarchyID 类型的数据无法直接print,必须调用ToString()方法,才能显示出来。
print HierarchyID::GetRoot().ToString()
示例代码如下
1,插入root元素,root元素是一个‘/’,HierarchyID类型必须有一个Root元素。
--插入root 元素
insert into dbo.emph2(idpath,id,descr)
values(HierarchyID::GetRoot(),0,'root')
2,类型为 HierarchyID 的列不会自动表示树,由应用程序来生成和分配 HierarchyID 值,使行与行之间的所需关系反映在这些值中。
emph表的数据来源于《数据层次结构建模之一》
;with cte(path,id,parentid,descr) as
(
select cast('/'+cast(id as varchar) as varchar(100)) as path, id,parentid,descr
from dbo.emph
where id=1 union all select cast(c.path+'/'+ cast(e.ID as varchar) as varchar(max)) as path,
e.ID,e.ParentID,e.Descr
from dbo.emph e
inner join cte c on e.ParentID=c.id
)
insert into dbo.emph2(idpath,id,descr)
select path+'/',id,descr
from cte
3,查看结果
select idpath.ToString(),id,parentid.ToString(),descr
from dbo.emph2

4,查看M1手下的所有员工
select e.idpath.ToString() as IDPath,e.id,e.parentid.ToString() as ParentIDPath,e.descr
from dbo.emph2 e
inner join dbo.emph2 e2 on e.idpath.IsDescendantOf(e2.idpath)=1
where e2.id=2

5,查看id所在的Level,只需要调用HierarchyID类型的GetLevel()。
select e.idpath.ToString() as IDPath,e.id,e.parentid.ToString() as ParentIDPath,e.descr,e.idpath.GetLevel() as Level
from dbo.emph2 e
inner join dbo.emph2 e2 on e.idpath.IsDescendantOf(e2.idpath)=1
where e2.id=2

Distributed2:Linked Server Login 添加和删除的更多相关文章
- SQL SERVER linked server Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
昨天创建了一个View, 这个view是一系列的表达式(CTE)组成,封装了好多的业务逻辑,简化下语句如下 ;with CTE AS( ...) SELECT a.company_id ,b.comp ...
- SQL server 2008 添加,删除字段
添加,刪除字段 如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识. 通用式: alter table [表名] add [ ...
- 从一个Bug说开去--解决问题的思路,Linked Server, Bulk Insert, DataTable 作为参数传递
声名— 部分内容为杜撰,如有雷同,不胜荣幸! 版权所有,如要引用,请标明出处! 如果打赏,请自便! 1 背景介绍 最近一周在忙一个SQL Server 的Bug,一个简单的Bug,更新两张 ...
- Distributed1:Linked Server 添加和删除
A linked server allows for access to distributed, heterogeneous queries against OLE DB data sources. ...
- 在SQL Server中添加Linked Server 图解版
在开发中,经常需要一个SQL Server服务器去访问另一个服务器,微软提供了一种方式Linked Server 下面是配置流程: 1).打开Server Objects下 Linked Server ...
- Sql Server有主外键关系时添加、删除数据
当表之间有主外键关系时删除数据会被约束,添加.删除失败 解决办法,我们可以先把主外键关系的检查约束给关掉 → 然后删除数据 → 之后再把约束打开 查询出关掉所有外键约束的语句 SELECT 'ALTE ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- [vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件
前言 今天接到领导布置的一个任务,是之前同事负责的项目.离职了,现在客户有些地方需要修改,由于我之前参与过,就落在我的头上了. 然后我就把代码弄了过来,打开发现其中需要用到水晶报表.(我觉得不好用,不 ...
- Linked Server: EXECUTE permission denied on object 'xp_prop_oledb_provider', database 'master', owner 'dbo'
问题出现环境: 使用SQL Server Management Studio 2008 连接到SQL Server 2000的数据库,点击其中一个Oracle链接服务器,单击"目录" ...
随机推荐
- iOS Start developing ios apps (OC) pdf
这是苹果官方最后一次更新的基于OC的iOS开发基础教程, 如果英文的看不懂,还有中文的版本哦. 点击下面的链接 好东西,分享给大家! 如果确实有帮到你,麻烦star一下我的github吧!
- 获取终端ip地址
网上找的,记录下 import java.io.*; import java.net.*; import java.util.*; //import org.apache.http.conn.util ...
- org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launch IE
1.在启动ie浏览器前先加入属性设置一项: DesiredCapabilities ie = DesiredCapabilities.internetExplorer(); ie.setCapabil ...
- C#与C/C++的交互zz
C#与C++交互,总体来说可以有两种方法: 利用C++/CLI作为代理中间层 利用PInvoke实现直接调用 第一种方法:实现起来比较简单直观,并且可以实现C#调用C++所写的类,但是问题是MONO构 ...
- 队列的JS实现
队列和栈相似,都是对插入和删除操作的部位做了限制特殊的线性表.在队列中,只能从一头删除节点,这一头叫做队首:而另一端只能做插入操作,这一头叫做队尾.很容易理解,队列是一个"先进先出" ...
- [翻译svg教程]svg 中的g元素
svg 中的<g>元素用来组织svg元素.如果一组svg元素被g元素包裹了,你可以通过对g元素进行变换(transform),被g元素包裹的元素也将被变换,就好这些被svg包裹的元素是一个 ...
- jsonp帮助你知道你关注的他或她喜欢什么歌曲
利用腾讯提供的QQ音乐API,返回一段对方在QQ音乐收藏的歌曲名称json数据,并对该json做解析,就能知道你的那个他或她喜欢听什么歌曲了,然后你就知道他/她的品位了,然后就自己看着办了,嘿嘿.我只 ...
- jquery 获取奇数索引的元素
$(".btn-xs:odd").click(function(){ var $buy_num=$(this).prev("#buy_num").val(); ...
- centos 创建swap 交换分区
阿里云的服务器是没有交换分区的,如 [www-data@iZbp1ivdq1ie5lmrhp13kjZ ~]$ free -m total used free shared buff/cache av ...
- sqlserver sp模板
某公司内部的sp模板 create procedure [usp_my_procedure_name] as begin set nocount on; declare @trancount int; ...