已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章图像和XML数据的添加应用实践,导入读者照片,导入读者联系方式,查询读者联系方式,导入读者照片,导入读者联系方式,查询读者联系方式,8.1导入读者照片,实现功能:借书证号为081101的读者的照片保存在D盘根目录下,照片的名称为081101.jpg,现要在SQLServer服务器上将该照片信息导入到图书管理数据库MBOOK中该读者的照片列上。实现方法:新建一个查询窗口,在窗口中输入如下语句:USEMBOOKGOUPDATETReaderSET照片=(SELECT*FROMOPENROWSET(BULKND:081101.jpg,SINGLE_BLOB)ASimage)WHERE借书证号=081101执行成功后查询081101读者的照片信息:SELECT借书证号,照片FROMTReaderWHRER借书证号=081101执行结果如下所示:,8.1导入读者照片,说明:OPENROWSET行集函数用于大容量数据的导入导出,修改照片信息时该函数用于加载已经存在的081101.jpg文件,并返回一个表。使用SELECT语句得到返回的表的内容,语句中为该表定义了别名image。使用UPDATE语句可以直接将得到的内容赋给TReader表的照片列,以二进制格式存储。除了可以加载图片文件,OPENROWSET函数还可以加载XML文件。,8.2导入读者联系方式,实现功能:如表8.1所示提供了081101、081102和081103借书证号读者的联系方式,要求将联系方式导入到MBOOK数据库的读者信息表中。方法一:使用UPDATE语句将081101读者的联系方式直接修改为表8.1所示的联系方式,使用的SQL语句如下:USEMBOOKGOUPDATETReaderSET联系方式=WL13900081101211101江苏省南京市鼓楼区上海路3号WHERE借书证号=081101,8.2导入读者联系方式,执行后使用SELECT语句查询081101的联系方式:SELECT借书证号,联系方式FROMTReaderWHERE借书证号=081101执行结果如下所示:,说明:读者的联系方式是以XML格式的形式存放的,根据XML语法可知,读者081101的为根元素,根元素下包含了读者的、和信息。要存放XML数据,存放数据的列或变量必须为xml数据类型。,8.2导入读者联系方式,方法二:将081102读者的联系方式存储在081102.xml文件中,并将该文件导入到MBOOK数据库该读者的联系方式中。在D盘根目录下新建一个文本文档,输入以下代码:CM13000081102211100江苏省镇江市京口区学府路28号,8.2导入读者联系方式,将文件名保存为081102.xml,打开“SQLServerManagementStudio”,新建一个查询窗口,输入如下语句:USEMBOOKGOUPDATETReaderSET联系方式=(SELECT*FROMOPENROWSET(BULKND:081102.xml,SINGLE_BLOB)AStemp_table)WHERE借书证号=081102执行后使用SELECT语句查询081102的联系方式:SELECT借书证号,联系方式FROMTReaderWHERE借书证号=081102执行结果如下所示:,8.3查询读者联系方式,(1)查询081101读者的详细地址。实现方法:新建一个查询窗口,输入如下语句:USEMBOOKGODECLAREcontactxmlSELECTcontact=联系方式FROMTReaderWHERE借书证号=081101SELECTcontact.query(/联系方式/地址/详细地址)AS详细地址执行结果如下所示:,说明:以上语句中将读者081101的联系方式列上的内容赋给xml变量contact,再通过XQuery语法中的XML数据类型方法query()方法查询xml变量contact中“详细地址”节点的内容。query()方法中的参数指定到“详细地址”节点。,返回,8.3查询读者联系方式,(2)查询081102读者“联系方式”中的姓名。实现方法:新建一个查询窗口,输入如下语句:DECLAREcontactxml,namechar(8)SELECTcontact=联系方式FROMTReaderWHERE借书证号=081102SETname=contact.value(/联系方式/姓名)1,char(8)SELECTname姓名执行结果如下所示:,L8.1导入读者照片,L1OPENROWSET行集函数当数据是以大容量的文件格式存在时,直接插入的方式显然不太合适。这时可以使用行集函数OPENROWSET来完成。OPENROWSET函数返回一个表,可以在查询的FROM子句中像引用表名那样引用OPENROWSET函数。将OPENROWSET函数返回的内容用做INSERT或其他语句的源表,就可以将数据文件中的数据导入到SQLServer表中。OPENROWSET函数的语法格式如下:OPENROWSET(BULKdata_file,SINGLE_BLOB|SINGLE_CLOB|SINGLE_NCLOB),L1OPENROWSET行集函数,说明:(1)BULK:使用OPENROWSET的BULK行集访问接口读取文件中的数据。在SQLServer中,OPENROWSET无须将数据文件中的数据加载到目标表,便可读取这些数据。这样便可在单个SELECT语句中使用OPENROWSET。(2)data_file:数据文件的完整路径,该文件的数据将被复制到目标表中。(3)SINGLE_BLOB|SINGLE_CLOB|SINGLE_NCLOB:SINGLE_BLO表示将data_file的内容作为类型为varbinary(MAX)的单行单列行集返回;SINGLE_CLOB表示通过以ASC格式读取data_file,使用当前数据库的排序规则将内容作为类型为varchar(MAX)的单行单列行集返回;SINGLE_NCLOB表示通过以UNICODE格式读取data_file,使用当前数据库的排序规则将内容作为类型为nvarchar(MAX)的单行单列行集返回。,L1OPENROWSET行集函数,(4)与SELECT一起使用的FROM子句可以调用OPENROWSET(BULK.)而非表名,同时可以实现完整的SELECT功能。带有BULK选项的OPENROWSET函数在FROM子句中时,需要使用AS子句指定一个别名。也可以指定列别名,如果未指定列别名列表,则格式化文件必须具有列名,指定列别名会覆盖格式化文件中的列名,例如:SELECTFROMOPENROWSET(BULK.)AStable_aliasSELECTFROMOPENROWSET(BULK.)AStable_alias(column_alias,.n),L1OPENROWSET行集函数,【强化练习】假设081102.jpg文件保存在D盘根目录下,在PXSCJ数据库中新建一个Imagetable表,包含Name和Content两列,分别存储图片文件名和图片文件的内容。使用OPENROWSET函数将081102.jpg文件导入数据表Imagetable中。创建Imagetable表的语句如下:USEPXSCJGOCREATETABLEImagetable(Namechar(20)NOTNULLPRIMARYKEY,Contentvarbinary(MAX)NULL,)插入数据使用如下语句:INSERTINTOImagetable(name,content)SELECT081102.jpgASname,*FROMOPENROWSET(BULKND:081102.jpg,SINGLE_BLOB)ASnote,L1OPENROWSET行集函数,图片插入后可以使用SELECT语句查看插入了的数据:SELECT*FROMImagetable执行结果如下所示:,返回,L8.2导入读者联系方式,L1XMLXML(eXtensibleMarkupLanguage)即可扩展标记语言,它与HTML一样,都是SGML(StandardGeneralizedMarkupLanguage,标准通用标记语言)。XML是Internet环境中跨平台的、依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单,易于掌握和使用。XML是一种标准化的文档格式语言,它使得发布者可以创建一个以不同方式查看、显示或打印的文档资源。XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身;而HTML是用来定义数据的,重在数据的显示模式。另外,XML是可扩展的,因为它提供了一个标准机制,使得任意文档构造者都能在任意XML文档中定义新的XML标记,这使得综合的、多平台的、应用到应用的协议的创建降低了门槛。,返回,L1XML,XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其他的数据交换格式,但不久之后它们都将支持XML,那就意味着程序可以更容易地与Windows、MacOS、Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中进行分析,并以XML格式输出结果。XML文档是由DTD和XML文本组成。所谓DTD(DocumentTypeDefinition),简单的说是一组关于标记符的语法规则,表明XML文本是如何组织的。它是保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来确定文档是否符合规范,元素和标签使用是否正确。,L2XML语法,本小节将从一个简单的XML实例开始介绍XML的语法,实例代码如下:wangzhangReminderDontforgetmethisweekend!12,L2XML语法,XML文档中的元素还可以带有若干个属性,属性的名称也是由用户自己定义的,属性的值必须添加引号。格式如下:元素内容文件中的“age=20”即为元素的属性和值。在编写XML文本时需要注意以下几点。XML标签的名称可以包含字母、数字及其他字符,不能以数字或标点符号开始;不能以字符“xml”、“XML”或“Xml”等开始;不能包含空格。XML语法是区分大小写的,所以在定义XML标签时必须保持大小写的一致性,例如,打开开始标签为“”,结束标签为“”就是错误的写法。XML必须正确地嵌套,例如,以下的标签嵌套关系是错误的:Thistextisboldanditalic必须修改为:Thistextisboldanditalic,L2XML语法,XML文档中允许空元素的存在,所谓的空元素就是只有标签没有实际内容的元素,空元素有两种表示方法。例如:“”或“”。在XML文档中所有的空格都会被保留。可以在XML文档中写注释,注释形式与HTML中一样,例如:XML中的实体引用。在XML文档中有一些字符具有特殊意义,例如:如果把字符“”放在XML元素中,会出错,因为解析器会把它当做新元素的开始。为了避免错误,需要用其对应的实体引用表示。XML中有5个预定义的实体引用,如表8.2所示。,表8.2XML中的实体引用,返回,L8.3查询读者联系方式,L1XQuery语法1XPath语法XPath是一种在XML文档中查找信息的语言,使用XPath的标准路径表达式可以在XML文档中选取相应的XML节点。在XPath中有7种类型的节点:元素、属性、文本、命名空间、处理指令、注释和文档(根)节点。例如:在之前创建的note.xml文件中,“”是根节点,“wang”是元素节点,“age=20”是属性节点。XPath是根据路径表达式在XML文档中查找信息的,其路径表达式与Windows的文件路径类似。可以把XPath比做文件管理路径,通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节点。XPath中常用的基本表达式在表8.3中列出。,表8.3XPath中的常用表达式,L1XQuery语法,表8.4中给出了一些XPath中路径表达式的实例。,表8.4XPath路径表达式实例,L1XQuery语法,另外,还可以使用谓词和通配符表达更为复杂的路径表达式,如表8.5所示。,表8.5复杂的路径表达式实例,L1XQuery语法,2XML数据类型方法SQLServer提供了一些内置的用于XML数据类型的方法。由于XML数据是分层次的,具有完整的结构和元数据,所以在查询XML实例时与普通数据类型不同,可以使用XML数据类型方法查询存储在xml类型的变量或列中的XML实例。常用的XML数据类型方法有以下几种。(1)query()方法。语法格式:query(XQuery)该方法只有一个参数XQuery,XQuery为一个字符串,用于指定查询XML实例中的XML节点(如元素、属性)的XQuery表达式。query()方法返回一个XML类型的结果。,L1XQuery语法,【强化练习】声明一个xml变量并将有关学生信息的XML数据分配给它,再使用query()方法对文档指定XQuery来查询子元素。DECLARExmldocxmlSETxmldoc=王林男20何丽女21SELECTxmldoc.query(/school/class/student)AS学生信息执行结果如下所示:,L1XQuery语法,(2)value()方法。语法格式:value(XQuery,SQLType)value()方法对XML执行XQuery查询,并返回SQL类型的标量值。通常,可以使用此方法从XML类型列、参数或变量内存储的XML实例中提取值。这样就可以指定将XML数据与非XML列中的数据进行合并或比较的SELECT查询。XQuery:XQuery表达式为一个字符串文字,从XML实例内部检索数据。XQuery必须最多返回一个值,否则将返回错误。SQLType:要返回的首选SQL数据类型,value()方法的返回类型要与SQLType参数匹配。vaule()方法返回一个带有结果的非XML数据类型,且只能返回单个值。(3)exist()方法。语法格式:exist(XQuery)exist()方法返回一个“位”值,表示下列条件之一:表示True(如果查询中的XQuery表达式返回一个非空结果),即它至少返回一个XML节点;0,表示False(如果它返回一个空结果);NULL(如果执行查询的XML数据类型实例包含NULL)。,L1XQuery语法,(4)modify()方法。语法格式:modify(XML_DML)使用该方法可以修改XML文档的内容,也可以修改XML类型变量或列的内容等。XML_DML参数是XML数据操作语言(DML)中的字符串,使用XMLDML语句可以在XML数据中插入、更新或删除节点。modify()方法只能在UPDATE语句的SET子句中使用。XML数据修改语言(XMLDML)是对XQuery语言的扩展,使XQuery语言能够进行数据操作(DML)。XMLDML将下列区分大小写的关键字添加到XQuery中:insert(插入)、delete(删除)、replacevalueof(替换)。XMLDML中insert关键字的功能是将一个或多个节点作为XML实例中节点的子节点或同级节点插入到XML实例中。语法格式如下:insertExpression1asfirst|aslastinto|after|beforeExpression2,L1XQuery语法,说明:Expression1:标识要插入的一个或多个节点。Expression2:标识XML实例中的节点。Expression1标识的节点是相对于Expression2标识的节点插入的。Expression2可以是XQuery表达式,返回当前被引用的文档中现有节点的引用。如果返回多个节点,则插入失败。如果Expression2返回一个空序列,则不会发生插入操作,并且不会返回任何错误。into|after|before:into关键字表示Expression1标识的节点作为Expression2标识的节点的子节点插入。如果Expression2中的节点已有一个或多个子节点,则必须使用asfirst或aslast来指定所需的新节点的添加位置,分别在子列表的开头或末尾。插入属性时忽略asfirst和aslast关键字。after表示Expression1标识的节点作为Expression2标识的节点的同级节点直接插入在其后面。而before则表示Expression1标识的节点作为Expression2标识的节点的同级节点直接插入在其前面。,L1XQuery语法,XMLDML语句的delete关键字的功能是删除XML实例中的节点。语法格式如下:deleteExpression表达式Expression不能是根节点。如果表达式返回空序列,则不进行删除,不返回错误。XMLDML语句的replacevalueof关键字的功能是在XML文档中更新节点的值。语法格式如下:replacevalueofExpression1withExpression2Expression1标识其值要更新的节点,它必须仅标识一个单个节点。Expression2用于指定节点的新值。【强化练习】使用XMLDML语句在一段XML数据中一个节点的后面添加一个节点。DECLARExmldocxmlSETxmldoc=王林男20SELECTxmldocAS插入节点前数据SETxmldoc.modify(insert1991-02-10after(/student/sex)1)SELECTxmldoc插入节点后数据,L1XQuery语法,执行结果如下所示:,L1XQuery语法,(5)nodes()方法。nodes()方法可以将XML实例拆分成关系数据。nodes()方法的结果是一个包含原始XML实例的逻辑副本的行集。在这些逻辑副本中,每个行示例的上下文节点都被设置成由查询表达式标识的节点之一。这样,后续的查询可以浏览与这些上下文节点相关的节点。语法格式:nodes(XQuery)asTable(Column)XQuery参数是一个字符串形式的XQuery表达式。如果查询表达式构造节点,这些已构造的节点将在结果行集中显示。Table(Column)用于指定结果行集的表名称和列名称。,L1XQuery语法,【强化练习】使用nodes()方法查找并列的节点。DECLARExmldocxmlSETxmldoc=王林男20王燕女21SELECTT.a.query(.)AS结果FROMxmldoc.nodes(/class/st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中西药联合用药试题及答案
- 少数民族文化课件
- 旁站监理管理细则
- 止水钢板安装专项方案
- 超声科工作制度及检查操作规范
- 天津市和平区汇文中学2027届中考物理押题卷含解析
- 2027届广东省肇庆市端州区中考物理全真模拟试题含解析
- 2027届海南省海口市秀英区市级名校中考联考物理试题含解析
- 2026年江苏建筑职业技术学院高职单招笔试化学历年参考题库含答案解析
- 2026年汉中职业技术学院高职单招笔试职业适应性测验历年参考题库含答案解析
- 医药购销不正之风治理课件
- 塔吊司索工考试题库及答案2026
- 广东省广州市增城区2025-2026学年七年级上学期期中生物学试题(含答案)
- (2026版)传染病防治自查报告
- 2026年四川省广元市辅警人员招聘考试真题解析含答案
- 2025年兵团新职工考试题及答案
- 2026年中国铁路广州局铁路局校园招聘真题
- 慢性肾脏病相关瘙痒管理中国专家共识解读课件
- 医院等级评审护理组工作汇报
- 华为集团干部管理办法
- 路基施工安全教育
评论
0/150
提交评论