模式实际上是名称空间,因此在SQL Serve中调用数据库对象时,一定要设置对象引用的环境。每个用户都被赋予了一个默认模式,在用户登录SQL Server并凋用数据库对象时,这个默认模式就是对象引用方式的区别机制。

与许多其他数据库产品一样,SQL Server也使用模式来组织对象,所以理解如何正确地访问这些对象是很重要的。

其工作作原理如下:模式由数据库设计人员定义,实际上就是类别的名称,这些模式名可以有相关的所有权与权限。这和SQL Server早期版本提供的功能是一样的。

如果使用随SQL Scrver一起安装的AdventureWorks2008数据库,且所用的登录被赋予了DBQ默认模式,就必须使用如下语法杳询Product表:

SELECT * FROM Production.Product

在SQL Scrvcr的早期版本中,对象通常被DBO用户拥有。如果不使用用户名作为对象引用的前缀,系统就默认使用DB0用户名。SQL Server 2005和2008的模式也是这样,对象可以属于DBO模式,如果在对象引用中不使用模式名,只要DBO是默认模式,系统就使用DBO模式。然而,如果默认模式从DBO改为其他模式,DBO模式就不会被使用了。如果对象使用其他模式,就必须在表达式中指定模式名。以下这个例子说明了这个功能。用户Fred将名为Bedrock1的SpL Server实例连接到Adventure Works2008数据库上,Fred的默认模式没有明确指定,所以这个模式默认设置为DBO然后Fred执行了下列查询:

SELECT * FROM Product

查询处理器尝试将Product表名解析为Bedrock1.AdventureWorksZ008.dbo.Product ,但是这个杳询执行失败了。原因在于Product表存在与Production模式中,而不是在DBO模式中。现在将Fred的默认模式改成:

ALTER USER Fred WITH  DEFAULT_SCHEMA = Production

当Fred再次执行查询时,查询处理器将Product表名解析为 Bedrock1.AdventureWorks2008.Production.Product,查询执行成功。

现在看一个相反的例子。用户Barney是助理 DBA,他将数据库连接到和Fred一样的实例上,但要检索DBO模式中的DBAudit表的内容,Barney的默认模式也被设置为Production。Barney运行了下列查询:

SELECT * FROM DBAudit

查询处理器先尝试将DBAudit表解析为Barney的默认模式Bedrock1.AdventureWorks2008.Production.DBAudit,但解析失败了。不过,由于查询处理器是从非DBO模式开始的,于是它返回DBO模式,并尝试经DBAudit表解析为Bedrock1.AdventureWorks2008.dbo.DBAudit。 这个解析是成功的,它返回了表的内容。

这种返回解析方式能够处理两种情况:一种是对象不在用户的默认模式中,而在DBO模式中的情况;另一种是对象不在用户的默认模式中,而在SYS模式中的情况。SYS模式是为系统对象保留的。包含可以管理SQL Server数据库的系统视图。

最后,理解不同模式中的表可以重名是很重要的。因此在Sales模式、Production模式和HumanResources模式中都可以创建User表。但此时必须用表的两部分名字来引用表,才能确保返回正确的数据。为什么要创建3个重名的表昵?因为SQL Server模式不仅是名称空间,还是一个安个环境。DBA可以给销售经理授予在Sales.User表中添加和删除用户的权限,但拒绝他访问Productian.User表。这是管理安全性和应用程序访问的另一种方式。

SQL Server 模式和名称解析的更多相关文章

  1. SQL Server 连接问题案例解析(1)

    SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...

  2. SQL SERVER 修改数据库名称(包括 db.mdf 名称的修改)

    刚开始学习SQL SERVER 2005,弄了一个上午修改数据库名,主要是需要修改db.mdf 和db_log.ldf的名字,总算解决了.在这里记下,以后再要修改了就别忘了. 假设原来数据库名为db, ...

  3. SQL Server并行死锁案例解析

    并行执行作为提升查询响应时间,提高用户体验的一种有效手段被大家所熟知,感兴趣的朋友可以看我以前的博客SQL Server优化技巧之SQL Server中的"MapReduce", ...

  4. SQL Server的实例恢复解析

    同Oracle一样,SQL Server在非一致性关闭的时候也会进行实例恢复(Instance Recovery),本文根据stack overflow的文章介绍一些SQL Server实例恢复的知识 ...

  5. SQL Server 事务隔离级别的解析

    近来在项目中遇到的一些有关事务的问题,跟同事间讨论了一下,后面翻看了一些书籍和做了一些测试,趁有点时间把它写下来,一来加深印象,二来希望对大家有所帮助,当然,由于自身水平问题,如理解有误,还请大牛指出 ...

  6. sql server报:名称 不是有效的标识符

    可能出现的几种情况: 1.执行sql提示 名称***不是有效的标识符 --添加括号 sql exec(sql) 注意exec的时候要到括号 exec  (@sql) 2.sql中的单引号嵌套采用两个单 ...

  7. SQL Server 判断表名称、索引、表字段是否存在

    1.判断索引是否存在 ps:@tableName 表名称, @indexName 索引名 IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id=OB ...

  8. SQL SERVER 根据字段名称批量设置为主键

    --设置主键 --alter table 你的表名 add constraint pk_s primary key (id) SELECT 'alter table ' + TABLE_NAME + ...

  9. sql server(mssql)联合注入

    sql server(mssql)联合注入 sql server简介: SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可 ...

随机推荐

  1. CSS 设计模式一 元素

    1.background  内置 是一种CSS内置设计模式,支持在元素下显示图片 HTML <!DOCTYPE html> <html lang="en"> ...

  2. Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消息

    我引起此原因的功能如下: 在aspx页面添加按钮 JS方法: function downPPT() { $("#Btn_DownPPT").click();    } <bo ...

  3. vector -1

    vector的特色有支持随机存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时. vector以模板(泛型)方式实现,可以保存任意类型的变数,包括使用者自定义的资料型态,例如:它可以是放置整 ...

  4. Jquery对回复者添加匿名评论选项

    通过prop方法获取checked属性,获取的checked返回值为boolean,选中为true,否则为flase <input type="checkbox" id=&q ...

  5. dedecms友情链接flink的调用方法

    标记名称:flink[标签简介][功能说明]:用于获取友情链接,其对应后台文件为"includetaglibflink.lib.php".[适用范围]:全局标记,适用V55,V56 ...

  6. 百度UEditor编辑器关闭抓取远程图片功能(默认开启)

    这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发,坑娘啊............... 问题又来 ...

  7. python中的StringIO模块

    python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...

  8. JWeb备忘录

    一.好记性不如赖笔头-- 工具类: JUnit4使用  MyEclipse快捷键 知识点: JAVA反射 JavaSe教程  Java5新特性  Java6新特性  Java7新特性  Java8新特 ...

  9. 【CCNA学习笔记】1.思科路由器的基本配置

    教学视频来源:http://edu.51cto.com/lesson/id-10930.html. 怎么安装模块.连交叉线什么的视频里面老师说的很清楚了,我只记录一下IOS配置的命令(虽然一副不明觉厉 ...

  10. PowerShell 管道和对象成员

    2.1  管道 在各种现代的shell中,均支持管道的概念. 管道的最大特点就是:  前一个命令的输出作为后一个命令的输入.cmd.bash均支持管道的概念,这里我就不多说了,下面我们说说PS中 管道 ...