SQL操作XML

合集下载

SQL对Xml字段的操作

SQL对Xml字段的操作

SQL对Xml字段的操作T-Sql操作Xml数据一、前言SQL Server 2005 引入了一种称为XML 的本机数据类型。

用户可以创建这样的表,它在关系列之外还有一个或多个XML 类型的列;此外,还允许带有变量和参数。

为了更好地支持XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象(BLOB)。

用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中。

随着SQL Server 对XML字段的支持,相应的,T-SQL语句也提供了大量对XML操作的功能来配合SQL Server中XML字段的使用。

本文主要说明如何使用SQL语句对XML进行操作。

二、定义XML字段在进行数据库的设计中,我们可以在表设计器中,很方便的将一个字段定义为XML类型。

需要注意的是,XML字段不能用来作为主键或者索引键。

同样,我们也可以使用SQL语句来创建使用XML字段的数据表,下面的语句创建一个名为“docs”的表,该表带有整型主键“pk”和非类型化的XML 列“xCol”:CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)XML类型除了在表中使用,还可以在存储过程、事务、函数等中出现。

下面我们来完成我们对XML操作的第一步,使用SQL语句定义一个XML类型的数据,并为它赋值:declare @xmlDoc xml;set @xmlDoc='<book id="0001"><title>C Program</title><author>David</author><price>21</price></book>'三、查询操作在定义了一个XML类型的数据之后,我们最常用的就是查询操作,下面我们来介绍如何使用SQL 语句来进行查询操作的。

idea 格式化xml的sql语句

idea 格式化xml的sql语句

高质量XML的SQL语句格式化方法随着信息技术的飞速发展,数据处理和管理越来越受到重视。

XML作为一种标准的数据交换格式,在各种软件系统中得到了广泛应用。

在实际应用中,我们通常需要将XML格式的数据导入到数据库中进行处理和分析。

而在处理XML数据的过程中,SQL语句的格式化对于提高数据处理效率和准确性非常重要。

本文将针对XML的SQL语句格式化方法进行深入探讨,并给出一些实用的建议和技巧。

一、XML的SQL语句格式化原理1. XML数据结构特点:XML数据具有层级结构、嵌套关系和节点属性等特点,这决定了XML格式的数据在导入数据库时需要进行有效的格式化处理。

2. SQL语句格式化需求:在将XML数据导入数据库时,通常需要将XML数据的层级结构和节点信息映射到数据库表的字段和记录中。

需要对XML数据进行解析和转换,生成对应的SQL语句来完成数据导入操作。

3. SQL语句格式化原理:SQL语句格式化的核心原理是通过解析和分析XML数据的结构,生成对应的INSERT、UPDATE或MERGE等数据库操作语句,从而实现对XML数据的有效导入和处理。

二、XML的SQL语句格式化方法1. 使用内置函数:大多数数据库系统都提供了用于处理XML数据的内置函数和存储过程。

通过调用这些内置函数,可以实现对XML数据的解析和处理,生成相应的SQL语句。

2. 使用解析工具:除了数据库内置函数外,还可以借助专门的XML解析工具来实现对XML数据的格式化处理。

这些解析工具通常提供了丰富的API和功能,能够一次性处理大量的XML数据,并生成对应的SQL语句。

3. 自定义解析逻辑:对于一些复杂的XML数据结构,可能需要编写自定义的解析逻辑来实现格式化处理。

通过编写解析脚本或程序,可以灵活地处理各种特定的XML数据格式,并生成高效、准确的SQL语句。

三、XML的SQL语句格式化实践技巧1. 了解XML数据结构:在进行XML数据的SQL格式化处理前,首先需要深入了解XML数据的结构和特点。

sql xml参数

sql xml参数

sql xml参数摘要:1.SQL 与XML 的概述2.SQL XML 参数的作用与意义3.SQL XML 参数的使用方法4.SQL XML 参数的实际应用案例5.总结正文:1.SQL 与XML 的概述SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的编程语言,它可以进行数据的查询、插入、更新和删除等操作。

XML(eXtensible Markup Language,可扩展标记语言)是一种用于描述数据结构的文本格式,它具有很强的可扩展性和通用性。

2.SQL XML 参数的作用与意义在SQL 中,XML 参数是一种特殊的数据类型,用于存储和处理XML 数据。

XML 参数在SQL 查询中具有重要作用,它可以让开发者更加方便地处理XML 数据,提高开发效率。

同时,XML 参数也有助于实现SQL 与XML 的互操作,使得两种数据格式可以互相转换和利用。

3.SQL XML 参数的使用方法在SQL 中,使用XML 参数主要分为以下几个步骤:(1)声明XML 参数:在使用XML 参数之前,需要先声明它,声明方法与声明普通变量相似,如:CREATE PARAMETER xml_param AS XML。

(2)赋值:可以通过SET 语句给XML 参数赋值,如:SETxml_param = "<root><element>Value</element></root>";。

(3)查询:在SQL 查询中,可以使用XML 参数进行查询,如:SELECT * FROM table_name WHERE xml_column LIKE CONCAT("%", xml_param, "%");。

(4)更新:通过UPDATE 语句,可以使用XML 参数更新数据库表中的数据,如:UPDATE table_name SET xml_column = CONCAT(xml_column, xml_param);。

xmlsql语句详解

xmlsql语句详解

XMLSQL语句是一种用于处理XML数据的SQL语句,用于在数据库中操作XML数据结构。

下面是对XMLSQL语句的详细解释:1. CREATE XMLSCHEMA: 用于创建一个XML模式,用于定义XML文档的结构。

语法为CREATE XMLSCHEMA,后面跟随模式名和模式定义。

2. CREATE XMLINDEX: 用于在数据库中创建一个XML索引,用于加速XML文档的查询操作。

语法为CREATE XMLINDEX,后面跟随索引名、索引类型和索引表达式。

3. SELECT XMLFOREST: 用于将XML文档转换为嵌套的XML元素树,以便于查询和处理。

语法为SELECT XMLFOREST(元素列表),其中元素列表是一个包含元素名称和值的列表。

4. SELECT XMLQUERY: 用于查询XML文档中的特定元素或子元素的值。

语法为SELECT XMLQUERY(查询表达式),其中查询表达式是一个用于选择元素的表达式,可以是XPath表达式或模式匹配表达式。

5. INSERT INTO XMLVALUE: 用于将值插入到XML文档中的特定位置。

语法为INSERT INTO XMLVALUE(元素名称, 值),其中元素名称是要插入的元素的名称,值是要插入的值。

6. UPDATE XMLATTRIBUTE: 用于更新XML文档中元素的属性值。

语法为UPDATE XMLATTRIBUTE(元素名称, 属性名称, 新值),其中元素名称是要更新的元素的名称,属性名称是要更新的属性,新值是新的属性值。

7. DELETE FROM XMLFOREST: 用于从嵌套的XML元素树中删除指定的元素或子元素。

语法为DELETE FROM XMLFOREST(元素列表),其中元素列表是一个包含要删除的元素的名称的列表。

这些是XMLSQL语句的一些基本用法和示例,可以根据具体需求进行扩展和调整。

需要注意的是,不同的数据库系统对XML数据的支持程度不同,语法和功能可能会有所差异。

sql 运算符

sql 运算符

sql 运算符SQL算符是StructuredQueryLanguage(SQL)的一种重要技术,它用于将一系列的表达式和语句结合起来,以确定查询的结果。

SQL句的结构的不同运算符平行放置,以确定需要处理的数据条件和操作。

在SQL中,运算符是由符号或关键字(如关键字SELECT)表示的,它们用来控制SQL语句的执行流程。

SQL中的一些最常见的运算符包括逻辑运算符,算术运算符,关系运算符,字符串运算符,表达式操作符和XML操作符。

1、逻辑运算符:逻辑运算符用于比较两个表达式,并返回布尔值(true或false)。

SQL中的逻辑运算符有:AND、OR、NOT、XOR,用来组合两个或多个条件,以便比较所提供的数据条件。

例如,可以使用AND、OR运算符来组合两个表达式,比较两者是否都为真,或者满足其中一个表达式。

2、算术运算符:这些运算符用来对两个或多个数值进行算术操作。

SQL中的算术运算符是:+, -, *, /, %,用于计算提供的两个或多个数值。

例如,可以使用*运算符,来计算两个数值的乘积,或者使用/运算符,来计算一个数值的除以另一个的结果。

3、关系运算符:这些运算符用于比较两个表达式,并返回真或假的结果。

SQL中的关系运算符是:=、>、<=、>=、 <>,用来比较两个表达式之间的大小关系。

例如,可以使用=运算符,来比较两个数值是否相等,或者使用>运算符,来比较一个数值是否大于另一个。

4、字符串运算符:这些运算符用于操作字符串,并返回指定字符串的结果。

SQL中的字符串运算符是:+, ||, CONCAT,用来操作字符串。

例如,可以使用+运算符,来连接两个字符串,或者使用||运算符,来连接两个字符串,并创建一个新的字符串。

5、表达式操作符:这些运算符用于操作表达式,并返回指定表达式的值。

SQL中的表达式操作符是:AVG、COUNT、SUM、MIN、MAX。

这些运算符用于处理表达式,返回表达式中所有满足条件的值的总和,最大值,最小值和平均值等。

sql xml文件语法

sql xml文件语法

sql xml文件语法摘要:1.SQL 与XML 文件的关系2.SQL XML 文件的语法规则3.XML 文件在SQL 中的应用场景4.XML 文件对SQL 数据操作的影响5.XML 文件在SQL 数据库设计中的重要性正文:SQL XML 文件语法是指在SQL 中使用XML 文件进行数据存储、查询和操作的相关语法规则。

XML(可扩展标记语言)是一种用于描述数据的文本格式,它可以存储结构化数据和半结构化数据。

SQL(结构化查询语言)是一种用于管理关系型数据库的编程语言。

将XML 文件与SQL 结合,可以更灵活地存储和管理数据。

1.SQL 与XML 文件的关系SQL 与XML 文件的关系主要体现在它们可以相互转换。

将SQL 查询结果转换为XML 格式,可以方便地查看和处理数据;将XML 文件导入SQL 数据库,可以实现数据的存储和管理。

这种转换可以通过SQL 的XML 函数实现。

2.SQL XML 文件的语法规则SQL XML 文件的语法规则主要包括以下几点:- XML 标识符:在SQL 中,XML 标识符以“XML”开头,如XMLTYPE、XMLSERIALIZE 等。

- XML 数据类型:在SQL 中,XML 数据类型用于存储XML 格式的数据。

例如,在Oracle 数据库中,可以使用XMLTYPE 来定义XML 数据类型。

- XML 函数:SQL 提供了许多XML 函数,如XMLPARSE、XMLEXISTS、XMLSERIALIZE 等,用于处理XML 文件。

3.XML 文件在SQL 中的应用场景XML 文件在SQL 中的应用场景包括:- 存储XML 格式的数据:当需要存储半结构化或非结构化数据时,可以将数据存储为XML 文件,并将其与SQL 数据库关联。

- 查询XML 数据:通过SQL 的XML 函数,可以方便地查询XML 文件中的数据。

例如,可以使用XMLQUERY 函数对XML 文件进行查询。

Sql语句查询XML-小结

Sql语句查询XML-小结

Sql语句查询XML-⼩结--两种⽅式查询DECLARE @varXML XML,@varXML1 XML,@varXML2 XML--1、xml数据源为属性⽅式SET @varXML = '<PARAM><Row FID = "1" FName = "张三" /><Row FID = "2" FName = "李四" /><Row FID = "3" FName = "王五" /></PARAM>'Select T.C.value('@FID','INT') AS FID,T.C.value('@FName','VARCHAR(20)') AS FNameFrom @varXML.nodes('/PARAM/Row') T(C)--2、xml数据源为标签⽅式SET @varXML1 = '<PARAM><Row><FID>1</FID><FName>张三</FName></Row><Row><FID>2</FID><FName>李四</FName></Row><Row><FID>3</FID><FName>王五</FName></Row></PARAM>'Select T.C.value('(FID)[1]','INT') AS FID,T.C.value('(FName)[1]','VARCHAR(20)') AS FNameFrom @varXML1.nodes('/PARAM/Row') T(C)--3、xml数据源为属性⽅式(多级嵌套)SET @varXML2 = '<root><hosptail hospCode = "1" hospName = "测试医院" ><dept deptCode = "2" deptName = "内科" ><doctor docCode = "3" docName = "王五" ></doctor></dept></hosptail></root>'Select T.C.value('(/root/hosptail/@hospCode)[1]','INT') AS FID,T.C.value('(/root/hosptail/@hospName)[1]','VARCHAR(20)') AS FName,T.C.value('(/root/hosptail/dept/@deptCode)[1]','INT') AS FID,T.C.value('(/root/hosptail/dept/@deptName)[1]','VARCHAR(20)') AS FName,T.C.value('(/root/hosptail/dept/doctor/@docCode)[1]','INT') AS FID,T.C.value('(/root/hosptail/dept/doctor/@docName)[1]','VARCHAR(20)') AS FNameFrom @varXML2.nodes('/root') T(C)应⽤场景:对外提供的WebService,别⼈访问接⼝后,传⼊XML参数,直接将XML当做存储过程的参数,在存储过程中查询、游标等解析处理。

sql server xml语法

sql server xml语法

SQL Server XML语法是指在使用SQL Server数据库时,对XML文档进行操作时所需的语法规则。

XML(可扩展标记语言)是一种用于传输和存储数据的标记语言,它具有可读性强、结构清晰的特点,所以在数据库中存储和操作XML数据是非常常见的需求。

SQL Server提供了丰富的XML功能,包括生成XML、将关系数据转换为XML、将XML数据转换为关系数据等,开发人员可以使用SQL Server XML语法轻松地实现这些功能。

下面将分别介绍SQL Server XML语法中常用的一些功能及其用法。

1. 生成XML在SQL Server中,可以使用FOR XML子句生成XML文档。

FOR XML子句可以与SELECT语句一起使用,将查询结果转换为XML格式。

例如:```sqlSELECT * FROM table_name FOR XML AUTO```上述语句将查询结果以AUTO模式转换为XML格式。

还可以使用RAW、EXPLICIT、PATH等模式生成不同格式的XML文档。

开发人员可以根据实际需求选择合适的模式来生成XML文档。

2. 将关系数据转换为XML除了使用FOR XML子句将查询结果转换为XML格式外,还可以使用XML DATA TYPE类型将关系数据转换为XML格式。

XML DATA TYPE类型是SQL Server中的一种特殊数据类型,用于存储XML数据。

例如:```sqlDECLARE xml_data XMLSET xml_data = (SELECT * FROM table_name FOR XML AUTO) ```上述语句将查询结果以AUTO模式转换为XML格式,并将结果存储到XML类型的变量xml_data中。

通过XML类型的变量,开发人员可以轻松地对XML数据进行操作。

3. 将XML数据转换为关系数据除了将关系数据转换为XML格式外,还可以使用OPENXML函数将XML数据转换为关系数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

T-Sql操作Xml数据一、前言SQL Server 2005 引入了一种称为XML 的本机数据类型。

用户可以创建这样的表,它在关系列之外还有一个或多个XML 类型的列;此外,还允许带有变量和参数。

为了更好地支持XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象(BLOB)。

用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中。

随着SQL Server 对XML字段的支持,相应的,T-SQL语句也提供了大量对XML操作的功能来配合SQL Server中XML字段的使用。

本文主要说明如何使用SQL语句对XML进行操作。

二、定义XML字段在进行数据库的设计中,我们可以在表设计器中,很方便的将一个字段定义为XML类型。

需要注意的是,XML字段不能用来作为主键或者索引键。

同样,我们也可以使用SQL语句来创建使用XML字段的数据表,下面的语句创建一个名为“docs”的表,该表带有整型主键“pk”和非类型化的XML 列“xCol”:CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)XML类型除了在表中使用,还可以在存储过程、事务、函数等中出现。

下面我们来完成我们对XML操作的第一步,使用SQL语句定义一个XML类型的数据,并为它赋值:declare @xmlDoc xml;set @xmlDoc='<book id="0001"><title>C Program</title><author>David</author><price>21</price></book>'三、查询操作在定义了一个XML类型的数据之后,我们最常用的就是查询操作,下面我们来介绍如何使用SQL 语句来进行查询操作的。

在T-Sql中,提供了两个对XML类型数据进行查询的函数,分别是query(xquery)和value(xquery, dataType),其中,query(xquery)得到的是带有标签的数据,而value(xquery, dataType)得到的则是标签的内容。

接下类我们分别使用这两个函数来进行查询。

1、使用query(xquery) 查询我们需要得到书的标题(title),使用query(xquery)来进行查询,查询语句为:select @xmlDoc.query('/book/title')运行结果如图:2、使用value(xquery, dataType) 查询同样是得到书的标题,使用value函数,需要指明两个参数,一个为xquery,另一个为得到数据的类型。

看下面的查询语句:select @xmlDoc.value('(/book/title)[1]', 'nvarchar(max)')运行结果如图:3、查询属性值无论是使用query还是value,都可以很容易的得到一个节点的某个属性值,例如,我们很希望得到book节点的id,我们这里使用value方法进行查询,语句为:select @xmlDoc.value('(/book/@id)[1]', 'nvarchar(max)')运行结果如图:4、使用xpath进行查询xpath是.net平台下支持的,统一的Xml查询语句。

使用XPath可以方便的得到想要的节点,而不用使用where语句。

例如,我们在@xmlDoc中添加了另外一个节点,重新定义如下:set @xmlDoc='<root><book id="0001"><title>C# Program</title><author>Jerry</author><price>50</price></book><book id="0002"><title>Java Program</title><author>Tom</author><price>49</price></book></root>'--得到id为0002的book节点select @xmlDoc.query('(/root/book[@id="0002"])')上面的语句可以独立运行,它得到的是id为0002的节点。

运行结果如下图:四、修改操作SQL的修改操作包括更新和删除。

SQL提供了modify()方法,实现对Xml的修改操作。

modify 方法的参数为XML修改语言。

XML修改语言类似于SQL 的Insert、Delete、UpDate,但并不一样。

1、修改节点值我们希望将id为0001的书的价钱(price)修改为100,我们就可以使用modify方法。

代码如下:set @xmlDoc.modify('replace value of (/root/book[@id=0001]/price/text())[1] with "100"')--得到id为0001的book节点select @xmlDoc.query('(/root/book[@id="0001"])')注意:modify方法必须出现在set的后面。

运行结果如图:2、删除节点接下来我们来删除id为0002的节点,代码如下:--删除节点id为0002的book节点set @xmlDoc.modify('delete /root/book[@id=0002]')select @xmlDoc运行结果如图:3、添加节点很多时候,我们还需要向xml里面添加节点,这个时候我们一样需要使用modify方法。

下面我们就向id为0001的book节点中添加一个ISBN节点,代码如下:--添加节点set @xmlDoc.modify('insert <isbn>78-596-134</isbn> before(/root/book[@id=0001]/price)[1]')select @xmlDoc.query('(/root/book[@id="0001"]/isbn)')运行结果如图:4、添加和删除属性当你学会对节点的操作以后,你会发现,很多时候,我们需要对节点进行操作。

这个时候我们依然使用modify方法,例如,向id为0001的book节点中添加一个date属性,用来存储出版时间。

代码如下:--添加属性set @xmlDoc.modify('insert attribute date{"2008-11-27"} into(/root/book[@id=0001])[1]')select @xmlDoc.query('(/root/book[@id="0001"])')运行结果如图:如果你想同时向一个节点添加多个属性,你可以使用一个属性的集合来实现,属性的集合可以写成:(attribute date{"2008-11-27"}, attribute year{"2008"}),你还可以添加更多。

这里就不再举例了。

5、删除属性删除一个属性,例如删除id为0001 的book节点的id属性,我们可以使用如下代码:--删除属性set @xmlDoc.modify('delete root/book[@id="0001"]/@id')select @xmlDoc.query('(/root/book)[1]')运行结果如图:6、修改属性修改属性值也是很常用的,例如把id为0001的book节点的id属性修改为0005,我们可以使用如下代码:--修改属性set @xmlDoc.modify('replace value of (root/book[@id="0001"]/@id)[1] with "0005"')select @xmlDoc.query('(/root/book)[1]')运行结果如图:OK,经过上面的学习,相信你已经可以很好的在SQL中使用Xml类型了,下面是我们没有提到的,你可以去其它地方查阅:exist()方法,用来判断指定的节点是否存在,返回值为true或false;nodes()方法,用来把一组由一个查询返回的节点转换成一个类似于结果集的表中的一组记录行。

三前言:此文只讲xml数据类型及相应的一些操作方法在解决日常T-SQL编程中的一些应用,而避开xml modify,xml schema,xml索引,命名空间等这些语法性或者生硬的一些问题(这些语法您可以查联机丛书),即此文主要讲以xml的一些操作特性及xquery去解决编程问题.Tags:xquery ,FLWOR迭带,sql:column ,sql:variable ,nodes ,value ,query ,xpath ,xquery function, if, 聚合函数, xs:function等典型应用举例:--(1)--====================================================================--拆分DECLARE@s VARCHAR(100)SET@s='a,b,c,dd,ee,f,aa,a,aa,f'--常规做法(sql2000常用),以一split函数拆分串为表类型结构,如--SELECT * FROM dbo.split(@s,',') a--当然,也可能是循环去拆分,或者以一输助表的identity列利用charindex等函数拿identity列值与','的位置匹配实现拆分--这些做法,roy_88及本人以前都整理过,不再累赘,可见推荐贴。

即便是xml法,也贴过多次,下面一笔带过--XML做法:SELECT b.v FROM(SELECT CAST('<r>'+REPLACE(@s,',','</r><r>') +'</r>'AS XML) x) a --将字串","换换为"</r><r>"并前后拼上<r>,</r>以用来构造xml串CROSS APPLY(SELECT v=t.x.value('.','VARCHAR(10)') FROM a.x.nodes('//r') AS t(x) ) b --使用 xml.nodes函数将xml串拆分为行/*abcddeefaaaaf*/--(2)--====================================================================--去重,@s中出现的元素,重复的只要一个,希望结果为 'a,b,c,dd,ee,f'--常规做法,循环或函数,或临时表拆后distinct--XML做法:--a.在(1)的基础上进行;WITH fc AS--定义cte命名,将@s转换为一个表结构(SELECT DISTINCT b.v vFROM(SELECT CAST('<r>'+REPLACE(@s,',','</r><r>') +'</r>'AS X ML) x) aCROSS APPLY(SELECT v=t.x.value('.','VARCHAR(10)') FROM a.x.nodes('//r') AS t(x) ) b--对这个表利用xml方法进行行值拼接SELECT STUFF(b.v.value('/r[1]','varchar(100)'),1,1,'')FROM(SELECT v=(SELECT','+ v FROM fc FOR XML PATH(''),ROOT('r'),TYPE)) b/*a,aa,b,c,dd,ee,f*/--b FLWOR语句 + T-SQL组合:SELECT STUFF(v,1,1,'') FROM(SELECT CAST('<r>'+REPLACE(@s,',','</r><r>') +'</r>'AS XML) x) a CROSS APPLY(SELECT x=(SELECT t.x.value('.','varchar(10)') v,idx=ROW_NUMBER() OVER(O RDER BY GETDATE()) FROM a.x.nodes('//r') AS t(x) FOR XML PATH('r'),TYPE)) b --利用row_number得到唯一idxCROSS APPLY(SELECT v=CAST(b.x.query('for $r in //r where count(//r[v=$r/v and idx<$ r/idx])=0 return concat(",",xs:string($r/v[1]))') AS VARCHAR(MAX))) c --类似count计数法,取得v相同的节点集idx值最小的节点,原型为:--SELECT * FROM tb a WHERE 1>(SELECT COUNT(*) FROM tb WHERE v=a.v AND id<a.i d)/*a ,b ,c ,dd ,ee ,aa ,f*/--c distinct-valuesSELECT REPLACE(v,' ',',') FROM(SELECT CAST('<r>'+REPLACE(@s,',','</r><r>') +'</r>'AS XML) x) a CROSS APPLY(SELECT CAST(a.x.query('distinct-values(//r)') AS VARCHAR(MAX)) v) b --直接调用distinct-values函数来操作/*a,b,c,dd,ee,f,aa*/-- 导入去重, last() , position()DECLARE@doc xmlSET@doc='<?xml version="1.0" encoding="gb2312" ?><employees><employee><empid>e0001</empid><name>萧峰</name></employee><employee><empid>e0002</empid><name>段誉</name></employee><employee><empid>e0003</empid><name>王语嫣</name></employee><employee><empid>e0003</empid><name>张无忌</name></employee></employees>'create table people2(personid varchar(10) primary key , name varchar(20))INSERT people2SELECT DISTINCT b.*FROM(SELECT x =@doc.query('for $e in //employee return //employee[empid = $e/empid][last()]')) a --FLWOR时,用当前节点去//emploee节点集中找节点集中empid等于当前节点的empid, 在找到的集合中取最后一个利用last()函数CROSS APPLY(SELECT id=t.x.value('empid[1]','varchar(100)'),name=t.x.value('name[1]' ,'varchar(100)') FROM a.x.nodes('//employee') AS t(x)) bSELECT*FROM people2/*e0001 萧峰e0002 段誉e0003 张无忌*/GOdrop table people2GO--同组一选多,也可应用此方法,不过没有必要,就不再累赘了。

相关文档
最新文档