QUOTE:
与Visual Studio集成
SQL Server 2005和DB2 UDB都提供了与Visual Studio的集成。它们和一个.NET CLR组件项目类型一起,提供了一个数据管理和部署的Visual Studio项目类型。SQL Server 2005还包括了六中不同类型的报表和商业智能项目的支持。SQL Server 2005和DB2 UDB都提供了对SQL程序代码的Visual Studio调试,但只有SQL Server 2005集成了调试.NET程序代码的支持。
程序员为SQL Server 2005开发和调试.NET程序代码,可选择的工具是Visual Studio 2005。您可以使用SQL Server数据库的两个不同的项目类型,Database Projects和SQL Server Projects。您也可以在同一个开发环境中编写客户端代码。
您可以使用一个数据库项目来编写和调试Transact SQL脚本。模版脚本对于表,视图,存储过程和触发器都是可用的。另外,当您向项目中添加一个新的数据库查询时,您可以使用一个图形化的查询设计器。一个数据库项目的布局在图1中显示。
您使用SQL Server项目来编写和调试即将在数据库中的CLR代码。SQL Server项目可以使用C#,VB.NET,和C++语言。模版类对于存储过程、用户定义函数、触发器、用户定义类型和用户定义聚合是可用的。这些数据库对象可以被自动部署到数据库和您选择的实例中。自动部署CLR对象支持CREATE功能,但是不支持ALTER功能。您可以编写测试脚本,并使其作为数据库的一部分,然后从Project菜单上选择Debug/Start,使用您选择的测试脚本来调试。Visual Studio 2005允许开发人员调试Transact SQL代码和SQLCLR代码,而且您可以从Transact SQL中调试到SQLCLR中,反之亦然。开发人员也可以从客户端代码调试到Transact SQL或SQLCLR程序代码中,或同时调试这三种类型的代码。
Visual Studio Server Explorer允许程序员浏览SQL Server数据库对象。您可以得到一个图形化的树状图,包括表,视图,函数,过程,同义词,类型和程序集。大多数的数据库对象定义都是可更新的,而且在对象中的数据可以通过使用"show data"菜单项来查看和更新,这也受限于用户/程序员的权限。
DB2 UDB 8.2为Visual Studio和Visual Studio 2003提供了附加的工具(IBM DB2 Tools)。我将讨论Visual Studio 2003的附加功能,因为它和Visual Studio 2005的扩展十分接近。您可以使用两个不同的项目类型,DB2 Database Project 和DB2 Class Library。
DB2 Database Project用来创建和部署数据库对象。模版和向导允许您创建和部署表,索引,触发器,视图,过程,函数和脚本。数据库对象向导包括了一系列的面板,它以图形化的方式指导您完成所有的步骤和对象(例如,一个表或视图)提供的选项。如果您不需要图形化的支持,您可以选择一个模版,并自己编写对象定义的细节。同样还有一个CLR过程的向导,它与DB2 Class Library项目一起,允许您建立和部署SQLCLR过程的定义到数据库中。您可以使用DB2 Class Library项目为存储过程创建.NET代码。DB2 Class Library项目包含了一个到适当的DB2 .NET 数据提供程序程序集的引用,以及一个模版存储过程。没有集成调试运行在DB2中的SQLCLR存储过程的功能,虽然可以在Visual Studio中调试DB2 SQL PL存储过程。
虽然您可以用Visual Studio Server Explorer查看DB2表,视图,和存储过程,但是对于DB2数据库来说,是用IBM Explorer add-in会得到更多的功能。IBM Explorer包括了对DB2数据库的功能,相似于Server Explorer对SQL Server的功能。这包括使用一系列的向导,来查看和创建表,索引,触发器,视图,存储过程,和函数。另外,您可以查看和更新表和视图中的数据,而且可以筛选在view/update面板中显示的数据。对于Windows .NET客户端,还有一个选项用来在IBM Explorer中创建一个DB2DataAdapter(一个封装SELECT/INSERT/UPDATE/DELETE的对象)。当使用SQL Server时,这里会有一个向导。
Visual Studio 2005也可以使用不同的商业智能项目。集成了包括SQL Server Analysis Services,SQL Server Integration Services,SQL Server Reporting Services和其它。在图4中显示了可用的SQL Server Business Intelligence项目。DB2的商业智能项目没有集成在Visual Studio中。

QUOTE:
语言程序开发人员感兴趣的其它工具
SQL Server 2005语言程序开发人员可以使用其它的工具,在数据库内部开发,跟踪,和排错应用程序。SQL Server Management Studio (SSMS)是一个在开发人员和DBA之间共享的工具。虽严SSMS运行为一个单独的工具,但是它们共享许多基本的界面和功能,包括与Visual Studio的解决方案和源代码的集成。使用SSMS,您可以使用模版来开发存储过程和其它的数据库对象。您也可以使用SSMS来直接查询数据库。文本形式和图形化的查询计划都可以用来为查询排错。在SSMS中,图形化的查询计划也可以保存为一个XML格式,并可以让其它的开发人员完全真实的审阅。Visual Studio可以用来开发和部署报表,以及集成和OLAP服务项目。我们将在这篇文章的后面讨论。SQL Server Profiler使开发人员可以对SQL Server的查询做实时的监视和跟踪。SQLCMD是一个命令行工具,它可以用来运行脚本。运行脚本是直接从命令行或通过调度SQL Agent任务来完成的。
DB2 UDB 8.2应用程序开发人员使用图形化的Command Center工具来开发和编目程序代码,并用CLP(命令行处理器)工具来执行它们。您可以使用Query Patroller和Visual Assist来跟踪一个查询,或得到查询计划的一个图形化的表述。
下面的列表关联两种数据库的开发人员工具
事务隔离选项
SQL Server 2005和DB2 UDB都支持四个ANSI SQL标准的事务隔离级别,并使用锁来实现它们。SQL Server 2005和DB2 UDB使用共享锁和排它锁的结合来实现必要的隔离,两个锁默认都是在行级别上实现的,并且当锁定的总行数非常大时将使用锁升级的技术。DB2 UDB 8.2使得DBA能够通过控制maxlock(锁升级发生前锁的百分比)和locklist(锁列表的最大容量)参数,更加细粒度的控制锁升级。SQL Server 2005和DB2 UDB 8.2默认的隔离级别为READ COMMITTED。这种类型的事务隔离也被称为悲观隔离。
SQL Server 2005和DB2 UDB 8.2都有一个隐式的事务模型。SQL Server 2005在Transact SQL中使用BEGIN TRANSACTION/END TRANSACTION语句,支持包含事务嵌套的用户定义事务界限。
SQL Server添加了通过版本化来实现隔离的能力,换句话说,存储行的不同版本。可以指定语句级别的版本化或事务级别的版本化。使用那种类型的版本化,写入器都不会阻塞读取器,并且读取器默认不会被阻塞(使用一个查询提示可以强制一个读锁定)。使用语句级别的版本化,读取器总是读到最后提交的事务的数据。事务级别的版本化和读事务开始时一致的数据。数据库通过版本化来支持隔离,必须提供冲突检测,所以尝试基于一个已经被另外一个用户更新了的数据的更新,将会导致更新操作回滚。版本化也包括在被更新的过程中存储行的老版本的附加开销。SQL Server 2005将它们这些行副本存储在TEMPDB数据库中。通过版本化实现事务隔离也被称为乐观隔离。
SQL Server通过一个新的事务隔离级别支持事务级别的版本化,它叫做SNAPSHOT。语句级别的版本化是通过设定一个数据库级别的选项来实现的。这个选项使得语句级别的版本化为默认选项,也就是说,以read committed隔离级别开始的事务将使用语句级别的版本化。版本化默认是禁用的,没有版本将被保存,除非一个版本选项在数据库中被启用。
事务隔离选项在下表中列出。
Snapshot隔离级别的支持使SQL Server程序员能够使用选择的snapshot语义的应用程序解决死锁问题。另外,snapshot隔离的支持简化了使用版本化语义建立的应用程序的转换(两个最著名的版本化数据库是Oracle和RDB)。通常的,从版本化数据库转换到锁数据库的应用程序必须进行重新架构设计,以避免事务死锁和由于锁定导致的整体数据库延迟。使用SQL Server 2005,这种转换更加简单。
通常,snapshot隔离增加并发病减少锁定。因此,它也被称为“乐观并发”。在锁数据库中,乐观并发可以在应用程序级别上,通过时间戳的管理实现,或者可以建立在数据库的事务管理中。在数据库中建立乐观并发降低了应用程序编程的复杂度和错误率。在一个关系系统中,当只有很少的机会两个用户试图同时更新相同的行时,这个功能将会非常有用。例如,一个web前端,用户只是修改他们自己的数据。在这种情况下,使用乐观并发会提高报表和列表处理的速度,因为数据写入器不会阻塞数据读取器。
版本化和锁的实现,使数据库应用程序设计更加灵活的使用最好的,最有效率的事务隔离级别。版本化也使开发人员能够"spot tune"一个死锁或锁转换问题的应用程序,而不需要完全重写应用程序。
QUOTE:
面向服务体系结构相关支持的功能
XML 支持
XML数据可以以三种基本方式存储在关系型数据库中:
1. 大的字符字段
2. 分解到关系型数据表中
3. XML数据类型
关于对于后两种类型的存储,匹配SQL名称到/从XML元素或属性名,以及匹配SQL数据类型到/从XML架构数据类型的ANSI标准,在ANSI SQL 2003规范的第14部分中被指定。
SQL Server 2005和DB2 UDB都支持以文本方式存储XML数据。DB2 UDB使用XML Extender功能提供对XML在文本列中的附加支持。XML列使得XML的存储或作为一个文件指针或是表中的一列。XML列使用三个XML用户定义数据类型(截然不同的类型):XMLVARCHAR,XMLCLOB,和XMLFILE。您可以建立特别的"side-tables"来索引XML信息,使用Document Access Descriptor (DAD)文件来简化查询。您可以在XML列中替换单独的元素或属性文本值,在SQL查询中使用元素或属性,并且在插入时验证XML。文档中的信息也可以使用NET Search Extender来搜索。SQL Server 2005不含有特定的功能来存储XML为文本,但是它提供了XML视图,允许对于关系表的查询就像是XML一样。XML数据使用SQL Server 全文索引来搜索。
在DB2 UDB中使用XML集合来实现组合和分解。XML和关系型数据的匹配,是在Document Access Descriptor (DAD)文件中指定的。DB2 UDB 8.2支持ANSI SQL 2003的组合和分解函数,叫做XMLPARSE 和XMLSERIALIZE。另外,还有组合函数XMLAGG,XMLCONCAT,XMLELEMENT,XMLFOREST,XMLNAMESPACES,和XMLROOT。SQL Server 2005使用原来的OpenXML UDF支持将XML分解到关系型数据中,以及使用新的再XML数据类型上的xml.nodes方法。使用nodes()方法的优势在于,在将它解析到简单类型之前,XML不会被加载道DOM中,这确实是一个性能/存储上的节省。SQL Server 2005支持从SQL组成到XML数据中,可以使用对Transact SQL的特有的扩展,SELECT ... FOR XML。四种SELECT ... FOR XML被支持,其中FOR XML RAW 和FOR XML AUTO是最简单的用来生成以元素为中心的或者以属性为中心的XML。FOR XML EXPLICIT 和FOR XML PATH可以生成混合的元素和属性,其中FOR XML EXPLICIT更加难写,但是比FOR XML PATH表现力更强。SQL Server不支持ANSI SQL 2003函数。
SQL Server 2005添加了一个原生XML数据类型。这是ANSI SQL 2003标准中的内建XML数据类型的第一次实现。类型最终是作为二进制存储的,更加易于查询和解析。多种输入编码都受支持,但是输出永远是UTF-16。这里同样支持XML片断和XML文档。XML可以通过标准XSD架构格式的XML架构来类型化。XSD架构可以直接被编目,并作为XML SCHEMA COLLECTION存储在数据库中。XML SCHEMA COLLECTION只是一个“普通”的数据库对象。由一个XML SCHEMA COLLECTION类型化的列,变量和参数,在数据插入和更新时,都要做验证。XML SCHEMA COLLECTION也允许通过改变XML数据类型列的验证和更新XML SCHEMA COLLECTION,来版本化XML架构。
DB2没有原生的XML数据类型,但是通过XML Extender存储的数据可以被一个XML架构或DTD(文档类型定义)来验证。DB2中也没有通过一个架构集合实现数据库架构存储的概念。
SQL Server 2005拥有一个W3C XQuery语言的子集的实现,用来查询数据库内部的XML数据类型。XML数据的XQuery是通过在XML数据类型上的四种方法实现的:exist(),value(),query(),和nodes()。这些方法可以用在SQL Server的表和视图,基于XML的检验约束,SQL查询,或XML数据类型变量上的查询中。SQL Server的XQuery操作被静态的类型化,并且还有两个特别的XQuery函数:variable() 或sql:column(),它们允许关系型数据库被包含在一个XQuery查询体内。四种不同类型的XML索引可以被建立,并用来提高这种类型的XQuery操作的速度。XQuery操作被建立到SQL Server查询引擎中以提高了效率,并且SQL语句的SQL和XQuery部分被放到同一个查询计划中,这样会优化整个计划。SQL Server 2005通过对XQuery词汇的扩展和xml.modify()方法,支持XML数据类型的原地更新。原地的Insert,delete和运算的替换值在XML数据类型中得到支持。SQL Server 2005全文索引对于XML数据类型是可见的。
DB2 UDB XML Extender可以在XML类型上,使用side-tables优化一些XPath查询。其中side-tables就像SQL Server 2005种的XML索引的实现,没有与SQL Server的特有的辅助XML索引的等价物。XSLT可以存储为CLOB数据类型,并使用XSLTTransformToClob 和XSLTTransformToFile函数。DB2 UDB支持 一个同盟数据库的概念,这和SQL Server 2005中的连接服务器的概念很相似。XML数据源,包括NICKNAMES和一个Websphere应用程序服务器可以用作一个同盟服务器,并允许XML和DB2关系表的联接。
SQL Server 2005和DB2 UDB都提供了从一个文件向数据库中插入XML的机制。SQL Server 2005通过对INSERT INTO...SELECT...语句的扩展,提供了这个功能。DB2 UDB提供了一个XMLClobFromFile函数,并添加了一个XMLFileFromClob函数来产生一个XML输出文件。
异步操作
每一个高度可伸缩性的数据库应用程序包含一些表,它们在一个通信系统中更好的被实现。无论在哪,应用程序的一部分向一个表中写入,并且另一个部分读出并处理那个表,那么这个表实际上用作为队列。典型的示例有:顺序处理,运行和计划任务,和MRP(制造业资源规划)预报操作。
SQL Server 2005通过Service Broker向数据库中引入了异步的事务队列操作。在这之前,数据库和对于这些数据库的队列操作是分开的产品,如使用MSMQ,MQ Series,或者其它的消息队列产品。在这里,我将讨论一些Service Broker特有的功能,以及使用内建在数据库内部的事务队列的优势。
SQL Server Service Broker不是一个普通目的的队列系统。它为建立有异步操作的数据库应用程序提供了需要的功能。Service Broker唯一支持的队列结构是事务队列,能够保证一次并只有一次消息传递。Service Broker服务,队列,和其它元数据作为数据库对象被内建到SQL Server中。它的对象(甚至是路由信息)是使用SQL DLL定义的,它的操作是通过Transact SQL 的DML扩展来调用的。这些数据库对象可以和其它SQL Server中的对象一起备份和还原。没有必要为Service Broker管理一个单独的Windows服务。Service Broker与SQL Server共享一个单独的事务上下文,这里也不需要分布式事务。
MQ Series是一个通用的队列系统,提供了不同质量的服务,并且除了终端-终端 范型外还支持 发布-订阅 范型。DB2 拥有与MQ Series的良好集成。如果它们运行在同一台机器上,DB2 和MQ Series可以共享一个事务管理器,在这种情况下不需要分布式事务。MQ Series运行DB2 UDB之外的在单独的产品中,有它自己的Windows服务和基础架构,并且必须单独管理。队列消息不会在数据库中存储,所以不会和数据库一起备份和还原。一个使用单独的队列和数据库产品的应用程序将会更加的复杂,因为代码必须要有足够的灵活性。拥有单独的子系统,也会增加可能的失败的点的数量。这意味着排错和调试将更加耗费人力和时间。
Service Broker也有一些在队列系统没有的功能。Service Broker使用两个终端间的对话来工作,并且在一个会话中的消息保证按顺序到达,即使在一个会话中使用多个事务。单独的会话可以被聚合到一起,并且在Service Broker应用程序中会话组是通信的单元。因为基本元素是会话组,而不是消息,所以您只能对于相关的会话组接收消息,而不用从队列中取。状态管理在应用程序的异步部分中更加容易,因为状态可以存储在数据库中。
Service Broker可以在数据库中使用激活存储过程,或给数据库外部的应用程序发送信号。激活存储过程可以用来在存储过程中实现“多线程”,多个激活过程的副本将并发的运行,直到一个用户定义的最大值。激活存储过程的每个备份都针对查询运行,RECEIVE命令得到下一个还没有被服务的会话组。通过调整同时能够运行的激活存储过程的个数,可以在工作高峰时段运行更多的工作。MQ Series可以使用消息触发器来为外部应用程序发送信号,但是不能直接定义存储过程为激活程序。
Service Broker 和MQ Series都可以以XML格式发送消息。Service Broker消息可以使用一个XML SCHEMA COLLECTION来验证。另外,Service Broker提供了命名的消息类型并强制只有正确的消息类型可以发送自正确的终端。DB2 UDB拥有通过MQ Series发送XML格式的消息的内建的支持。
HTTP数据库客户端和Web Services
SQL Server 2005用户可以使用特有的库或HTTP和SOAP调用来访问数据库。使用HTTP和SOAP作为一个客户端进行数据库访问,您通过web service协议与数据库通信。SQL Server可以使用Internet Information Server (IIS),通过SQLXML,来发布SQL Server数据,并且通过HTTP终端实现数据库内部的支持。SQLXML为以前的SQL Server版本提供了向后兼容,HTTP终端是SQL Server 2005种的新内容。DB2 UDB也使用特有的客户端通信库,并且通过集成Websphere应用程序或其它web服务器,可以使用HTTP通信。就像前面提到的.NET操作一样,在SQL Server进程用运行连接,而不是在一个单独的web服务器上,意味着执行性能的提升。如果在相同的机器上使用一个单独的web服务器进程是可行的,如果在数据库和web服务器之间的网络通信非常快,或者如果混合数据库和web操作在一个静态页中是必须的,那么一个单独的web服务器或应用程序服务器将更加可取。
SQL Server HTTP终端被定义为普通的数据库对象,并且访问它受限于SQL Server的权限,以及特有的CONNECT ENDPOINT权限。终端可以宿主特定集合的存储过程和用户定义函数,并且允许一般的SQL语句。每个存储过程或用户定义函数都将生成一个Web Service操作。您可以将SQL Server生成的WSDL(Web Services 描述语言)发布,或为每个操作自定义WSDL。HTTP终端不需要web Server,而是像其它的两层客户端的API一样,直接连接到SQL Server中。SQL Server的安全一直被使用,而且发送密码的身份验证方法(比如基本身份验证)必须使用SSL完成连接。
DB2 UDB使用叫做WORF的架构来支持web services,该架构是一个DB2 web services对象的运行时框架。使用这个架构,您将为您希望支持的每个操作生成一个DADX文件。操作包括通过XML Extender发送XML内容,发表存储过程和用户定义函数,以及支持一般的SQL语句。这个DADX文件可以使XML数据符合XML列或集合,或简单的定义存储过程的输出。强类型的WSDL从DADX文件生成,如果支持普通的SQL,一个一般的WSDL消息类型同样会被发布。Websphere或其它的应用程序服务器,比如Apache,必须和WORF一起使用。也可以使用一个集成的Websphere服务器,使它在分开的进程中运行。Websphere是一个单独的产品,并会带来额外的成本。
SQL Server SQLXML支持web services和HTTP通过XSLT对SQL Server数据进行整形。SQL-XML视图(使用XPath)和普通的SQL语句可以直接被发布为HTTP调用(部推荐),或通过在IIS服务器上的SQLXML模版文件。一种特殊的格式叫做updategram可以用来通过一个HTTP消息更新SQL Server数据。Internet信息服务器必须和SQLXML一起使用,并且权限是通过IIS和一个特殊的配置工具定义的。
DB2拥有一些特定的系统定义函数的web services 消费者。SQL Server 2005可以成为一个通过SQLCLR存储过程的拥有适当的安全级别的web services消费者,如果假扮在SQLCLR存储过程的内部执行。SQL Server 2005也可以通过集成服务使用web services 。
查询通知
SQL Server 2005引入通知来支持SQL Server查询。您可以使用这种支持来发送一个命令到SQL Server,并且发送一个请求,如果再次执行相同的命令所得到的结果和起初所得到的结果不同,那么将声称一个通知。您可以使用一个从属对象来实现,它检测何时底层的数据被改变。发送到服务器的命令可能通过任何形式的客户端API发送,比如ADO.NET,OLE DB,Open Database Connectivity (ODBC),Microsoft ActiveX Data Objects (ADO),或SOAP,而且它将包含标签表明需要一个通知。对于请求中的每一个部分的执行,服务器创建一个“通知预约”,它将引发请求中包含的每一条语句。通知将通过一个应用程序可以查询的SQL Service Broker队列传递,并在通知可用时使用激活服务或阻塞语句返回结果。程序通知对于在应用程序中启用结果缓存来说非常有用,比如数据库驱动的Web站点。
DB2 UDB 8.2没有等价的内建功能。DB2 开发人员不得不手动的建立相同的功能,而且可能使用单独的Websphere应用程序服务器或MQ Series。
QUOTE:
Transact-SQL 功能性和DB2 SQL
在这个小节中,我将比较在两个产品中的一些SQL功能。因为SQL Server和DB2的主要OLAP功能都包含在一个单独的OLAP服务器上,它可以与关系型服务器进行互操作,所以在这个部分将会做关系型数据库功能的比较。
OLAP 函数
SQL Server 2005和DB2 UDB 8.2 都支持ANSI SQL 2003顺序和排序函数。DB2支持标准的 ROW_NUMBER(),RANK(),和DENSE_RANK()函数,SQL Server 2005也支持这些函数,并添加了一个NTILE(n)函数。两个数据库都支持使用PARTITION BY关键字在OVER()从句中分区。
SQL Server 2005在SQL语句中支持PIVOT和UNPIVOT函数。这些函数是ANSI SQL 2003 OLAP函数的一部分。在一个SQL语句中的PIVOT表达式用来基于特定列的值提供聚合分组(这些可以是系统定义的聚合,SQL Server支持用户定义聚合)。PIVOT也可以用来基于列值规范化不规范的数据,它将列值转到列中。如果数据库包含“属性列”,其中在引用表中的每个值都包含不同的“名字-值”属性对,那么这将非常有用。UNPIVOT可以用来执行与PIVOT相反的操作,它用来将正规数据非正规化到一个目标表的一个单列的“属性-值”对中。DB2支持使用DB2 Cube Views来旋转和创建数据透视表。
SQL Server 2005 Analysis Services也提供了MDX查询语言,它包括了一个丰富的对SQL的多维扩展。MDX查询允许大量的OLAP特定的函数,它们比ANSI规范更好。只有当数据是用SQL Server Analysis Services 功能来定义的时候,MDX才可以使用,尽管OLAP数据(Cubes)可以存储在SQL Server数据库中,一个专门的OLAP数据存储设备中,或二者结合。
异常处理
DB2 UDB使用标准的SQL PL异常处理工具,叫做handler-types。支持的handler types包括CONTINUE,EXIT,和UNDO handlers。这三种一般支持的条件是SQL EXCEPTION xxxxx,SQL WARNING nnnnn (其中nnnnn为一个指定的SQLSTATE代码),和NOT FOUND。这些handlers可以指定一个单独的SQL语句或一个SQL代码块。错误可以在handler代码的内部或外部,被SIGNAL和RESIGNAL。
SQL Server 2005使用TRY-CATCH结构。这很像C++,.NET,和Java之类的语言。在SQL Server 2005中,您可以定义用户特定的错误,并在CATCH块的内部或外部,使用RAISERROR Transact SQL语句发送他们,虽然您不能重新抛出一个错误。还有一些特殊的系统定义的函数,它们在CATCH块内部执行,并返回语义丰富的错误信息和进程中的事务状态。
函数类型
SQL Server 2005和DB2 UDB 8.2都支持质类型和表值类型的函数。DB2 UDB 8.2支持基于OLE DB表函数。在SQL Server 2005中,表函数从其他数据源中返回数据,它是通过连接的服务器和4部分的表名实现的。
当用户定义函数使用基本表作为输入时,SQL Server有一种特殊的语法来实现一个基本表和一个用户定义函数之间的JOIN。通过使用CROSS APPLY和OUTER APPLY语法,可以支持INNER 和OUTER JOIN。UDF可以使用来自选择的表值的列作为参数。这些函数早期的用户报告说,一个单一的CROSS APPLY可能一大块基于游标的Transact SQL代码。而这些功能在DB2 UDB 8.2中不可用。
DB2 UDB 8.2扩展了用户定义函数的概念,它通过在CREATE FUNCTION语句中指定MODIFIES SQL DATA从句,允许在函数中修改数据。
[ 本帖最后由 于 2008-1-21 17:51 编辑 ]