SQLServer2000的特点王英飚SQLServer项目经理微软中国研究开发中心conniew@microsoft.com预备知识XML基本知识SQLServer工具Transact-SQL(T-SQL)日程检索数据修改数据ADO和OLEDBXML视图,XPath,Updategrams,XMLBulkloadHTTP访问,模版XMLForSQLServer技术展望SQLServer2000(FORXML查询扩展)XMLForSQLServer架构浏览器应用IISISAPISQLXML(XML视图)SQLServer2000中间层客户端DBDBSQLServer通过ADO访问用ForXML检索XML文档SQLLanguageExtensionSELECT…FROM…WHERE…ORDERBY…FORXML(raw|auto[,ELEMENTS]|explicit)[,XMLData][,BINARYbase64])FORXML–Raw模式在结果集中每一行有一个row元素没有嵌套的子元素在结果集中的列/值表示成row元素的特性/值和数据库的结果集很类似,但表示成XML格式很容易转换FORXML–Raw模式检索:SELECTCustomerID,OrderIDFROMCustomersLEFTOUTERJOINOrdersONCustomers.CustomerID=Orders.CustomerIDFORXMLraw结果:rowCustomerID=“ALFKI”OrderID=“10643”/rowCustomerID=“ALFKI”OrderID=“10692”/rowCustomerID=“ANATR”OrderID=“10308”/…rowCustomerID=“FISSA”/FORXML–Auto模式数据库中的表/视图名表示成元素名列名用来表示特性如果加ELEMENTS选项,列表示成子元素支持嵌套的XML输出结果结果集中的层次结构(元素的嵌套)基于SELECT子句中指定的列所标识的表顺序可以用表和列别名来改变元素和特性名FORXML–Auto模式检索:SELECTCustomers.CustomerID,OrderIDFROMCustomersLEFTOUTERJOINOrdersONCustomers.CustomerID=Orders.CustomerIDORDERBYCustomers.CustomerIDFORXMLauto结果:CustomersCustomerID=“ALFKI”OrdersOrderID=“10643”/OrdersOrderID=“10692”//CustomersCustomersCustomerID=“ANATR”OrdersOrderID=“10308”/…自定义的XML格式表中的列匹配成XML元素可以表示成:元素值特性子元素InvoiceInvoiceNo=10248Date1996-07-04T00:00:00/DateLineItemProductID=11QuesoCabrales/LineItemLineItemProductID=42SingaporeanFriedMee/LineItem/Invoice通用表用表格的形式来表示XML文档Tag和Parent标记号确定XML树中的父子层次结构列名用来决定元素/特性匹配TagParentInvoice!1!InvoiceNoInvoice!1!Date!ElementLineItem!2!ProductIDLineItem!21NULL102481996-07-04T00:00:00NULLNULL2110248NULL11QuesoCabrales2110248NULL42Singaporean…用EXPLICIT模式构造Transact-SQL来产生通用表增加FORXMLEXPLICIT子句SELECT1ASTag,NULLASParent,OrderIDAS[Invoice!1!InvoiceNo],OrderDateAS[Invoice!1!Date!Element]FROMOrdersWHEREOrderID=10248FORXMLEXPLICITInvoiceInvoiceNo=10248Date1996-07-04T00:00:00/Date/Invoice检索数据配置虚拟目录使用HTTP访问SQLServer使用用于SQLServer的IIS虚拟目录管理实用工具或编程来创建虚拟根配置虚拟目录的名称,指明虚拟目录相关联的物理目录,说明虚拟目录的类型支持Dbobject,Schema,或模板类型基于URL的HTTP访问URL检索=select+*+from+Customers+FOR+XML+Auto&root=root直接的检索数据库中的对象(“DBObject”)[@EmployeeID=1]/@Photo模板XML视图检索数据模板模板是一个SQL2000可以解析的XML格式的文件在数据库和消费者之间提供一个抽象层支持参数和存储过程检索数据模板可以包含多个查询命令并且根据需要来匹配相应的schemas每个查询可以包含一个(且只有一个)XSL文件支持SQLSelect或XPath查询必须用MDAC/ADO2.6或以上版本推荐大多数应用用此方法检索数据模板?xmlversion='1.0'?rootxmlns:sql=urn:schemas-microsoft-com:xml-sqlsql:xsl=products.xslsql:querySELECT*FROMProductsORDERBYProductNameFORXMLAUTO/sql:query/root大小写敏感,必须匹配大小写!!!使用模板•简单的模板•简单的模板加上XSL•带参数的模板=OR检索数据XML视图在关系型数据上的XML视图视图的语法是XMLSchema(“匹配Schema”)Schema本身提供“缺省的匹配”SQL2K只支持XML-DataReduced(XDR)使用带批注的XDR架构创建XML视图表,列名标签之间的关联用XPath来检索XML视图检索数据表和列缺省的匹配:元素和同名的表匹配特性和表中同名的列匹配显示的匹配:sql:relation与表匹配sql:field与列匹配检索数据带批注的SchemasSql:relation为ElementType申明数据库表名Sql:relationship在schema中定义两个ElementType之间的关系Sql:field申明数据库列名Sql:key-fields标识那些唯一标识表中行的列key-relation在关联中的主表key在关联中的主健foreign-relation在关联中的从表foreign-key在关联中的外健sql:relationship检索数据带批注的SchemasElementTypename=Ordersql:relation=Orderssql:key-fields=OrderIDAttributeTypename=CustomerID/AttributeTypename=OrderID/attributetype=CustomerID/attributetype=OrderID//ElementTypeElementTypename=Customersql:relation=Customerssql:key-fields=CustomerIDAttributeTypename=UniqueCustomerNumber/attributetype=UniqueCustomerNumbersql:field=CustomerID/elementtype=Ordersql:relationshipkey-relation=Customerskey=CustomerIDforeign-relation=Ordersforeign-key=CustomerID//element/ElementTypeXML名DB名Schemas和XMLSQLViewMapper•用XPath直接在URL返回XML文档(用root参数)(nwind.xdr)=root•用XPath直接在URL返回XML文档(用常量批注)(nwindroot.xdr)•用XPath返回一个客户[@ID='ALFKI']日程检索数据修改数据ADO和OLEDB修改数据OpenXML在SQLServer中加载XML文档,并用T-SQL来修改数据UpdateGrams在XML文档中修改SQL数据BulkLoad提供高速性能将XML大文档插入到SQLserver中OpenXMLParsesp_xml_preparedocumentXMLXMLDOM……shredOpenXML……PhoneIDnameinsertinto…SQLServer2000语法OpenXML(idoc,rowpattern,flags)[WITH(SchemaDecl|Tablename)]参数idoc–sp_xml_preparedocument中的文档句柄rowpattern–用XPath来选择视图中的行flags–值提供默认映射SchemaDecl以下列的形式来定义schema(column_name1column_type1[colpattern1],…,column_namejcolumn_typej[colpatternj])Tablename是数据库中某个表的名字修改数据OpenXML子句OpenXML是T-SQL的扩展用OpenXML就好像是关系型视图来看XML文档执行任何有效的操作–读/写INSERTINTOCustomers(CustID,FirstName)SELECT*FROMOpenXML(@idoc,'Customer‘,1)WITH(CustIDvarchar(5),FirstNamenvarchar(30))修改数据UpdateGrams通过一个XML视图来修改数据库申明之前(before)和(after)XML文档的映像(现在是何种数据,并且你希望变成何种数据)乐观的并发控制每一个updategram都翻译成一个或多个INSERT,UPDATE,和DELETE语句,在一个单一的事务日志中在XPath和SQL语句中共享参数修改数据UpdateGramssql:updatexmlns:sql=urn:schemas-microsoft-com:xml-updategram“sql:syncmapping-schema=“n