关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »巧用SET选项设置SQL Server客户端配置

    巧用SET选项设置SQL Server客户端配置

    2015-10-08 00:00:00 出处:ITJS
    分享

    通常情况下,利用客户端连接到SQL Server数据库的时候,其默认是采用服务器的相关配置来初始化客户端的连接。但是在某些情况下,数据库管理员希望客户端能够管理自己的设置。而且往往这些客户端的设置跟服务器的设置不一样,甚至相反。此时客户端要能够在不修改服务器设置的情况下,连接到数据库服务器中。

    要实现类似的功能,就需要用到SQL Server数据库中的SET选项。如要实现上述的需求,数据库管理员可以把SET ANSI_DEFAULTS ON,然后再通过SQL_COPT_SS_PRESERVE_CURSORS来设置客户端的配置。如此的话,就可以实现客户端与服务器配置的不同,提高客户端配置的灵活性。

    不过需要注意的是,使用这些SET选项会导致客户端与服务器配置的不同,即一些连接参数、运行环境等等可能会出现混乱。为此在使用SET选项时还必须考虑这个一致性的问题。也就是说,使用SET选项时要注意如下细节,

      一、SET选项的生效时间。

    利用SET选项来设置相关的运行参数与环境的时候,要注意其生效时间。这与服务器默认参数不同。默认参数其是始终生效的,除非后来数据库管理员改变了其设置。但是使用SET选项来设置相关参数时,其生效时间就尤其特殊性。一般来说,SET选项可以分为分析时SET选项与执行时SET选项。随着他们的分类不同,这个选项的生效时间也是不同的。如分析时选项在分析期间分析出文本中的选项时生效,而不管是否受流语句的控制。而执行选型则在指定这些选项的代码执行期间生效。如在一个批处理程序中,可以设置一个SET选项。假如在执行这个SET语句之前,批处理程序已经因为某些原因执行失败,则这个选项就不会生效,即数据库系统没有设置这个选项。假如在执行SET语句后执行失败,则这这个选项就已经生效了。

    所以说假如SET选项跟一些批处理程序一起使用时,就需要特别注意这个SET选项的位置。因为这个SET选型是否生效直接跟批处理程序中其他语句的执行情况相关。如现在一个批处理程序中有8条语句,而SET选型就是其中的一条如在第五条。假如在执行这个批处理程序的时候,在第三条语句的时候卡住了,那么这个第五条的SET选项语句就根本不起作用。为此笔者建议数据库管理员,像这些SET选项语句通常情况下最好放置在批处理程序的前面部分,以初始化批处理程序的相关运行环境。除非有特别的需要,否则的话不要放置在中间。

      二、要注意SET选项的作用范围。

    其实SET选项设置的参数与数据库服务器的默认参数就好像是一个局部变量与全局变量的关系。前者设置的参数就是一个局部变量,其只有在一个特定的范围内有效;离开了这个范围的话,就会失效。而全局变量的话通常情况下都是有效的,除非在某个领域内又对其重新赋值了。所以说,数据库管理员必须要了解SET选型的作用范围,为后续引用这些参数做好准备。具体来说,这些SET选项,往往跟不同的功能结合使用。如跟批处理程序、跟触发器等等结合使用。而随着这个使用范围的不同,其作用范围也是不同的。

    1、在会话过程中有效。有些SET选项是专门针对客户端连接的。如笔者刚开始提起过的那个SET选型,其就是专么用来设置客户端的连接参数的。这些参数可能跟服务器的默认参数之间存在着比较大的差异。那么这些参数的作用范围是多少呢 通常情况下,针对专门会话所这支的SET选项,其在重置或者服务器中用户的会话终止之前有效。也就是说,在客户端连接的初始化过程中SET选项生效。只要用户的这个会话没有终止,这些选项都是生效的。除非用户终止了当前的会话或者服务器强制重置相关参数,否则的话这个SET选项随着会话启用而生效,随着会话终止而失效。另外需要注意的是,针对某个用户设置的SET选项,其只对这个用户的会话有效,而不会影响到其他用户跟数据库之间的通信。

    2、支持 MARS 的连接维护一组默认的 SET 选项值。在该连接下执行批处理时,将把默认的 SET 选项值复制到请求的环境。批处理结束后,该环境将复制回会话的默认设置。通过这种方法,在同一连接下同时执行的多个批处理将在独立的 SET 选项环境下运行。这是一个官方的说明,他是什么意思呢 也就是说,在同一个连接的过程中,可能会执行多个批处理作业。假如在这些批处理作业中,没有设置SET选项的话,则其默认会采用服务器的默认设置。但是假如在第一个批处理程序中采用了SET选项更改这个默认设置,那么在第一个批处理程序运行环境中就会采用这个SET选项的设置。从而可以根据企业实际的需求,在同一个连接下为每个批处理程序设置相对独立的运行环境。在支持 MARS 的连接下,假如同时执行多个批处理且它们会修改批处理执行环境,则得到的默认连接环境取决于最后执行完的批处理。也就是说,最后这个连接的参数取决于最后运行的皮处理程序中的SET选项。简单的说,除非当前的连接中断掉或者服务器实现强制重置,否则的话当前连接中的相关参数会被批处理程序中的SET选项改变。而且这个值会被多次改变。最后的参数是有最后一个批处理程序中的SET选项所决定。

    3、在触发器或者过程中也可以使用SET选项。那么跟他们结合使用时,SET选项的寿命又有多少呢 这要分情况来对待。一是要看触发器或者过程内容有没有多次使用SET选项。如在触发器中,可能一开始就利用SET选项设置了某个参数;然后某个功能执行完毕后又把这个参数恢复了默认值,再继续执行剩下的功能。在这种情况下,其有效持续时间就是触发器内部这个参数被重置之前。也就是说,在一个触发器或者内部可以先打开某个选项,然后再关闭掉。那么只有在这个选项打开与关闭之前有效。二是假如在触发器内部一开始启用了某个SET选项,后来没有把他关闭掉,那么这个选项也不会永远生效下去。通常情况下,只要当前这个触发器或者过程执行完毕后,这个SET选型就会失效。为此简单的说,这个SET选项就好象是存储器或者过程中的局部变量,其只在触发器或者过程的内部生效。

    4、假如一个过程A调用了另外一个过程B,而现在假如过程A中利用SET选项更改了某些参数,那么这个更改会否影响到过程B的运行环境将呢 答案是不确定。这主要是看过程B中有没有对这个SET选型进行重新设置。也就是说,除非在过程B中进行了显示的重置,否则来自所有更高级别的代码中的SET选项值在低级别的代码中有效。简单的说,过程A调用了过程B,则过程A中的SET选项值在过程B中同样有效。除非过程B显示的对这SET选型进行了重置。其实这个原理很简单,就好象在过程A中定义了一个变量,然后调用了过程B。此时过程B使用需要用到这个过程A中定义的变量时,他的值就是在过程A中修改后的值。当然在过程B中也可以对这个过程A中定义的变量值进行修改,如可以对这个变量的值进行重置。不过当这个过程A结束时,这个变量就会失效了。

    可见,这个SET选项跟程序开发过程中的局部变量与全局变量非常的相似。数据库管理员在使用这些SET选项的时候,需要注意一个基本的原则,即其作用范围往往只在当前的会话或者过程中有效。为此数据库管理员在启用某个SET选项的时候,就需要考虑一个问题,即这个改变只是针对某个特定的会话或者某个特定的作业,还是针对全部用户 假如是前者的话,则可以通过SET选项来设置。但是假如是后者的话,那么最好通过服务器设置来改变。否则的话,要为每个会话或者每个作业设置SET选型那工作量就比较大了。笔者以前学过程序开发,为此来学些这个SET选型的时候比较喜欢利用全局变量与局部变量的关系来了解这个功能。全局变量即在整个运行环境中都有效;而局部变量则只在某个作用范围内有效。就是如此简单而已。掌握了这个SET选项的作用范围之后,就可以帮助数据库管理员来确定到底是否该采用SET选项、以及在什么时候采用这个SET选项,来提高客户端连接以及用户运行环境的灵活性。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。