在SQL 2005中使用CLR函数实现字符串排序

2009-1-6    | |
打印本文章
RSS

导读:在本文中,我们通过一个例子,来看看如何使用CLR函数,对输入的字符串进行分析、排序,最后得到排序后的字符串。

关键词:SQL Server SQL Server 2005 CLR函数 字符串排序

正在加载数据...

  伴随着SQL Server 2005,微软发布了公共语言运行库(CLR),允许开发人员和DBA能够利用SQL Server之外的托管代码。

  CLR为那些懂的.net开发语言,但是不懂的T-SQL语言的人,提供了一种实现方式。使用CLR,可以直接在SQL Server中创建存储过程、触发器,用户自定义函数,集合体和类型等等。在本文中,我们通过一个例子,来看看如何使用CLR函数,对输入的字符串进行分析、排序,最后得到排序后的字符串。

  假设储存在数据库表中的数据如下所示:

  apple,pear,orange,banana,grape,kiwi

  我们希望的结果排序如下所示:

  apple,banana,grape,kiwi,orange,pear

  我们可以写SQL Server函数来实现这一功能:解析字符串,将结果储存在一个临时表中,然后按指定顺序检索结果,并将字符串重新结合在一起。

  我们也可以编写一个简短的CLR函数,来实现同样的功能。接下来让我们来看看CLR函数具体是如何实现这一功能的。

  步骤1:启用CLR集成

  首先需要在SQL Server外围应用配置器中进行设置,确保SQL Server已经启用了CLR。如图1所示:

  SQL Server 2005外围应用配置器
    
    图1:SQL Server 2005外围应用配置器

  选择“功能的外围应用配置器”,显示如图2所示界面:

  功能的外围应用配置器
    
    图2:功能的外围应用配置器
  
  
    确保“启用CLR集成”这一项打勾,然后点“确定”按钮。
   步骤2:编写CLR代码

  首先,我们需要做的是编写CLR代码。采用VB.net或者C#来写都可以,在这个例子中我们将使用VB.NET 。

  下面的范例代码中,创建了一个名为CLRFunctions的类,该类中包含了一个名为SortString的函数。SortString函数对输入的一个字符串变量进行排序,并返回一个排序后的字符串。

  第一步:使用内置的VB函数,把 “,”作为分隔符分割输入的字符串,得到一个字符串数组;

  第二步:采用Array.Sort,对数组中的数据进行排序列。这一部如果采用T-SQL来写的话,更为简单。

  将代码保存到SQLServerCLRSortString.vb文件中。
     

 Public Class CLRFunctions
  Public Shared Function SortString(ByVal Name As String) As String
  Dim i As Integer
  Dim returnValue As String
  Dim stringArray() As String
  ' 分割字符串,得到数组
  stringArray = Split(Name, ",")
  ' 对数组进行排序
  Array.Sort(stringArray)
  '初始化返回值字符串
  returnValue = ""
  For i = LBound(stringArray) To UBound(stringArray)
  returnValue = returnValue & stringArray(i) & ","
  Next i
  Return returnValue
  End Function
  End Class
  
   
    步骤3:编译CLR代码
  为了使用此代码,需要先对代码进行编译。
    在命令行状态下,可以使用vbc.exe应用程序来编译代码。具体命令如下所示:

  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc /target:library C:\SQLServerCLRSortString.vb

  vbc.exe应用程序,在.NET 2.0框架目录中可以找到,不同的服务器或桌面因安装路径不同可能会有差异。

  编译成功后,将得到C:\SQLServerCLRSortString.dll这个DLL文件。把DLL拷贝到我们的SQL Server机器上

  步骤4:在SQL Server中注册DLL

  代码编译通过后,您需要与SQL Server中注册DLL。要实现到这一目的,可以在要使用该函数的数据库中能运行这些命令。

  注册的目的,就是将外部创建的DLL与SQL Server内部对象进行绑定,这样外部DLL中的函数就可以和SQL Server中的正常函数一样进行调用了。

  在下面的函数中,我们可以看到引用CLRFunctions.CLRFunctions.SortString由三个部分组成:
    


  *CLRFunctions – 装配引用
  *CLRFunctions – VB.net 代码中所引用的类名
  *SortString – VB.net代码中所引用的函数
  CREATE ASSEMBLY CLRFunctions FROM 'C:\SQLServerCLRSortString.dll'
  GO
  CREATE FUNCTION dbo.SortString
  (
  @name AS NVARCHAR(255)
  )
  RETURNS NVARCHAR(255)
  AS EXTERNAL NAME CLRFunctions.CLRFunctions.SortString
  GO
  
    步骤5:创建测试用的数据表和数据

  可以创建一个示例表和一些测试数据,来检验一下,具体代码如下所示:
     


CREATE TABLE testSort (data VARCHAR(255))
  GO
  INSERT INTO testSort VALUES('apple,pear,orange,banana,grape,kiwi')
  INSERT INTO testSort VALUES('pineapple,grape,banana,apple')
  INSERT INTO testSort VALUES('apricot,pear,strawberry,banana')
  INSERT INTO testSort VALUES('cherry,watermelon,orange,melon,grape')
  
   
    步骤6:测试

  如果要测试CLR函数,在步骤4执行后示例表和数据创建完之后,可以运行下面的SELECT语句,分别列出排序前和排序后的数据,两者便于对比。

  SELECT data, dbo.sortString(data) as sorted FROM testSort

  上述SQL执行后,如图3所示:

   排序前和排序后的数据
    
    图3:排序前和排序后的数据

  步骤7:删除CLR函数

  如果希望彻底删除CLR函数,您需要将之前创建的VB文件以及编译过程中产生的DLL都删除。

  运行下面的T-SQL代码可以删除之前创建的对象。

   


     DROP FUNCTION dbo.SortString
  GO
  DROP ASSEMBLY CLRFunctions
  GO
  DROP TABLE testSort
  GO

   
   
    小结

  通过宿主.NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显著地增强了数据库编程模型。开发人员可以用任何CLR语言(如C#、VB.NET等)来写存储过程、触发器和用户自定义函数,在实现某些功能的时候会比用T-SQL代码效率更高。

原文出处:http://news.newhua.com/news1/program_database/2009/15/091515645JE7AGJH1I99C69555FFC23066E9B8490KEEFJ1AFHIA4K.html
来源:华军资讯    
  评论
 
SQL Server中,错误群集在实例级别上工作。每次你创建SQL Server错误群集时,你可以创建容错的SQL实例。
 
越来越多的组织正将它们的物理工作环境向虚拟机中迁移,以获取统一数据中心的益处。在这个发展进程中,数据库服务器也不例外。
 
正常情况下,当用户在SQL Server上启动一个存储过程时,他们必须等待存储过程来完成数据处理,然后才进行下一个动作。通过使用Service Broker,它们稍候可以将数据处理放到队列中留到后面执行。
 
SQL Server Service Broker的配置可能很复杂,同时在因特网上关于它的文档也不多。然而,一旦配置并且正确地运行了Service Broker,那么它可以提供一个坚实的内部数据库或者外部数据库通信平台来快速一致地在系统之间发送数据。
 
SQL Server 2005镜像配置实际上就是由三个服务器组成的一个保证数据的环境,分别是:主服务器、从服务器、见证服务器。
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录