开发CLR数据库对象:CLR存储过程(下)

日期: 2009-10-22 作者:McGraw-Hill翻译:冯昀晖 来源:TechTarget中国 英文

设置存储过程的安全性   到这个时候,存储过程的代码就完成了,但是由于安全性问题,它不能执行。默认情况下,SQL Server CLR对象只能访问数据库资源,它们不能访问外部资源。在本例“usp_ImportFile”中,存储过程需要访问文件系统,所以默认安全设置需要修改一下。要启用对外部资源的访问,你需要打开项目属性,点击数据库Tab页。

然后在许可级别下拉列表中,你可以把它的值从安全(Safe)修改为外部(External)。更多关于CLR安全选项的信息将会在本章的后续部分加以表述。   部署存储过程   在CLR存储过程源代码编译成程序集以后,你可以添加程序集到数据库,创建CLR存储过程。……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

设置存储过程的安全性

  到这个时候,存储过程的代码就完成了,但是由于安全性问题,它不能执行。默认情况下,SQL Server CLR对象只能访问数据库资源,它们不能访问外部资源。在本例“usp_ImportFile”中,存储过程需要访问文件系统,所以默认安全设置需要修改一下。要启用对外部资源的访问,你需要打开项目属性,点击数据库Tab页。然后在许可级别下拉列表中,你可以把它的值从安全(Safe)修改为外部(External)。更多关于CLR安全选项的信息将会在本章的后续部分加以表述。

  部署存储过程

  在CLR存储过程源代码编译成程序集以后,你可以添加程序集到数据库,创建CLR存储过程。你可以以两种方式做到这一点。如果你使用Visual Studio 2005创建SQL Server CLR数据库对象,那么你可以交互式地直接从Visual Studio中部署CLR存储过程。要把存储过程部署到SQL Server,在Visual Studio菜单中选择“构建|部署解决方案”选项。

  你也可以手工执行部署,请参考前面的章节“创建CLR数据库对象”。要做到这一点,你实际上需要把编译好的动态库复制到一个SQL Server可以访问到的目录或者文件共享位置。然后运行CREATE ASSEMBLY 语句注册该动态库,并把它复制到数据库中。

  create assembly usp_ImportFile
  from 'C:tempusp_ImportFile.dll'
  WITH PERMISSION_SET = EXTERNAL

  CREATE ASSEMBLY语句把C盘临时目录下的“usp_ImportFile.dll”文件的内容复制到了SQL Server数据库中。WITH PERMISSION SET从句用来指定这个程序集可以访问SQL Server数据库外部的资源。这里需要这么做,因为存储过程要读取外部文件。

  CREATE PROCEDURE usp_ImportFile
  @filename nvarchar(1024),
  @columnname nvarchar(1024) OUT
  AS
  EXTERNAL NAME usp_ImportFile.[usp_ImportFile.StoredProcedures]
  .usp_ImportFile

  CREATE PROCEDURE语句用来使用CLR程序集创建一个新的SQL Server存储过程。这个CLR存储过程使用两个参数。第一个是输入参数,第二个是输出参数。EXTERNAL NAME从句使用一个三部分组成的名称来指定动态库中的目标方法。该名称的第一部分代表了程序集名称。第二部分表示类名称。如果类被包含在命名空间下(本例中就是这样),命名空间前缀也必须作为类名的一部分,都要放在方括号内。最后名称的第三部分指定了即将执行的方法名。

  调用存储过程

  在CLR存储过程创建完成之后,它可以像所有T-SQL存储过程那样被调用,请看下面的示例代码:

  DECLARE @myColumn ntext
  EXEC usp_ImportFile 'c:temptestfile.txt' @myColumn

翻译

冯昀晖
冯昀晖

TechTarget特邀编辑。2003年入软件行业,熟悉软件过程所有环节,对机构信息化的各方面有深入理解和实践经验。现就职于某互联网创业公司,目前关注互联网分布式系统架构和机器学习。喜欢传统文化社科哲学(尤喜《周易》、《老子》),喜健身喜抓举(具备抱人引体向上的能力),喜欢中国象棋(具备盲棋1对2的能力)。

相关推荐

  • TT百科:存储过程

    存储的过程可以访问或修改数据库中的数据,但并不绑定到特定的数据库或对象,这提供了许多优点。

  • 数据库和数据仓库的区别在哪儿?

    目前,大部分数据仓库还是用数据库进行管理。数据库是整个数据仓库环境的核心,是数据存放的地方和提供对数据检索的支持。

  • 如何使用服务来平衡Oracle RAC 数据库工作负载

    为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。

  • CouchDB使用体验

    不要在大数据上尝试CouchDB,不要在需要频繁查询的地方使用CouchDB,不要在需要大量汇总、分析数据的地方使用CouchDB。