Questions tagged «xml»

“可扩展标记语言”的缩写。用于传输结构化数据的文本标记语言。

2
如何将HTML代码读取为XML并获得类似sql中示例的输出?
我将HTML代码存储在数据库中,我想将其读取为XML。 我的代码: http://rextester.com/RMEHO89992 这是我拥有的HTML代码的示例: <div> <section> <h4> <span> A </span> </h4> <ul> <li> <span> Ab</span> AD <span> AC </span> </li> <li> <span> Ag</span> <span> AL </span> </li> </ul> <h4> <span> B </span> </h4> <ul> <li> <span> Bb</span> BD <span> BC </span> </li> <li> <span> Bg</span> <span> BL </span> </li> </ul> …
11 sql-server  t-sql  xml 

2
将动态SQL(数据透视查询)转换为xml输出时,为什么日期的第一位转换为unicode?
我使用的是来自Bluefeet的出色示例/dba//a/25818/113298,以创建数据透视并将其转换为xml数据。 声明参数 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); 接下来是具有大量代码的CTE,将CTE的结果放入临时DB(与示例中相同) SELECT B.[StayDate] -- this is a date dd-mm-yyyy , B.[Guid] INTO #tempDates FROM BaseSelection B 生成col(与示例相同) SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120)) FROM #tempDates FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,''); 结果集是我应该期望的 set @query = 'SELECT …
11 sql-server  xml  pivot 

4
修改XML:将属性转换为元素
我有一XML列包含具有相似结构的数据: <Root> <Elements> <Element Code="1" Value="aaa"></Element> <Element Code="2" Value="bbb"></Element> <Element Code="3" Value="ccc"></Element> </Elements> </Root> 如何使用SQL Server修改数据以将每个Value属性更改为一个元素? <Root> <Elements> <Element Code="1"> <Value>aaa</Value> </Element> <Element Code="2"> <Value>bbb</Value> </Element> <Element Code="3"> <Value>ccc</Value> </Element> </Elements> </Root> 更新: 我的XML看起来更像这样: <Root attr1="val1" attr2="val2"> <Elements> <Element Code="1" Value="aaa" ExtraData="extra" /> <Element Code="2" Value="bbb" ExtraData="extra" /> <Element Code="3" …
11 sql-server  xml  xquery 

2
返回属性不包含特定字符的xml序列
考虑以下简单的XML: <xml> <customer name="Max"> <email address="me@you.com" /> </customer> <customer name="Erik"> <email address="erik@your-mom.com" /> </customer> <customer name="Brent"> <email address="brentcom" /> </customer> </xml> 我想获取<Customer>序列列表,其中address该<email>项目的属性不包含@。 所以,我想要的输出看起来像: <customer name="Brent"> <email address="brentcom" /> </customer> mcve: DECLARE @x XML = '<xml> <customer name="Max"><email address="me@you.com" /></customer> <customer name="Erik"><email address="erik@your-mom.com" /></customer> <customer name="Brent"><email address="brentcom" /></customer> </xml>'; 该查询: SELECT …
10 sql-server  xml  xquery 

1
用XQuery替换SQL Server中强类型xml元素的值
给定一个元素,在XML Schema Collection中定义如下: <xsd:element name="xid"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="32" /> </xsd:restriction> </xsd:simpleType> </xsd:element> 您将如何使用XQuery更新元素? 该元素位于模式集合的ns命名空间中。我一直在尝试通过以下查询更新元素: update cm.item set data.modify( 'declare namespace ns="http://www.anon.com"; replace value of (/ns:*/ns:xid)[1] with "X00011793" cast as element(ns{http://www.anon.com}:xid,#anonymous) ?') where id = 11793 但这会产生以下错误: 消息9301,级别16,状态1,第2行XQuery [cm.item.data.modify()]:在此版本的服务器中,“ cast as”不可用。请使用“投射为?” 句法。 如果我完全删除演员表并使用此查询: update cm.item set data.modify( 'declare namespace …

1
使用xml参数更新多个数据时,如何避免使用合并查询?
我正在尝试使用值数组更新表。数组中的每个项目都包含与SQL Server数据库中的表中的一行相匹配的信息。如果表中已经存在该行,则使用给定数组中的信息更新该行。否则,我们在表中插入新行。我已经基本描述了upsert。 现在,我试图在采用XML参数的存储过程中实现这一目标。我使用XML而不是表值参数的原因是因为这样做,我将不得不在SQL中创建自定义类型并将该类型与存储过程相关联。如果我曾经更改过存储过程或数据库模式中的某些内容,则必须重做存储过程和自定义类型。我想避免这种情况。此外,TVP优于XML的优势对我的情况没有用,因为我的数据数组大小永远不会超过1000。这意味着我无法使用此处提出的解决方案:如何在SQL Server 2008中使用XML插入多个记录 另外,这里的类似讨论(UPSERT-MERGE或@@ rowcount是否有更好的替代方法?)与我要的内容有所不同,因为我试图将多行插入表中。 我希望我可以简单地使用以下查询集从xml向上插入值。但这是行不通的。仅当输入为单行时,才应采用这种方法。 begin tran update table with (serializable) set select * from xml_param where key = @key if @@rowcount = 0 begin insert table (key, ...) values (@key,..) end commit tran 下一个替代方法是使用穷举的IF EXISTS或其以下形式的变体之一。但是,我以效率不佳为由拒绝了这一点: IF (SELECT COUNT ... ) > 0 UPDATE ELSE INSERT 下一个选择是使用Merge语句,如下所述:http …


1
元素名称变量
我有这个可以正常工作的tSQL代码: SELECT c.logguid, a.b.value('./PropertyValue', 'varchar(max)') asd FROM [dnn].[dbo].[EventLog2] c cross apply sss.nodes('/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y")]') as a(b) 但是,我想做的是传递一个动态列表,该列表包含在每个值之间进行“或”运算的多对值,即 SELECT c.logguid, a.b.value('./PropertyValue', 'varchar(max)') asd FROM [dnn].[dbo].[EventLog2] c cross apply sss.nodes( '/LogProperties/LogProperty[PropertyName=sql:variable("@x") and PropertyValue=sql:variable("@y") or PropertyName=sql:variable("@a") and PropertyValue=sql:variable("@b") ]' ) as a(b) 有办法吗?
9 t-sql  xml 

2
存储XML数据的数据类型:VARCHAR(MAX)或XML
我正在使用SQL Server 2008为一组新资源定义一个架构...在这种情况下,每个记录(例如row)将需要存储XML片段。不时 尽管不经常 我将需要查询XML以查找元素和属性值。如果任由我自己设计,尽管倾向于让我相信这是有问题的,但我倾向于使用xml数据类型。这使我想到了我的问题。 在这种情况下,尝试决定将XML存储在xml列与varchar(MAX)列之间时,应该考虑哪些因素 如果有帮助,这里有一些其他详细信息: 对于这些片段(例如XSD的)使用架构的决定尚未决定 碎片的大小范围从小到很大 所有XML的格式都正确 在一天的过程中,需要大约3个月的时间,通过在线查询支持收集多达10,000个碎片 对XML的查询将全天进行,但是很少会出现这种类型的并发查询。

3
XML查询问题
我正在尝试生成SQL查询,以从以下SQL XML中获取“ DATE”值: 我已经尝试过类似的方法,但我认为我不了解这些概念。 select xConfig.value('(/SearchjobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression) [1]','nvarchar(max)') from Job 这是XML文本: <SearchJobConfig> <QueryID>1072</QueryID> <QueryString> <SearchCriteria name="Search query" > <ExpressionSet logicalOperator="AND"> <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="GREATER_EQUAL" dataType="string" caseSensitive="false">2019-06-01T04:00:00</SimpleAttributeExpression> <SimpleAttributeExpression displayName="Date" npmPropertyId="4" searchOperation="LESS_EQUAL" dataType="string" caseSensitive="false">2019-06-13T03:59:59</SimpleAttributeExpression> <SimpleAttributeExpression displayName="Class" npmPropertyId="1056" searchOperation="EQUALS" dataType="int32" caseSensitive="false">65</SimpleAttributeExpression> </ExpressionSet> </SearchCriteria> </QueryString> </SearchJobConfig> 预期的输出将是日期: 2019-06-01T04:00:00 2019-06-13T03:59:59 以及如何在同一行上获得结果。示例: date_val_start date_val_end 2019-06-01T04:00:00 2019-06-13T03:59:59 我正在使用SQL …

1
如何仅使用Xpath从SQL Server中的空XML标记返回null?
我有一个应用程序,可以在XML列中存储有关记录的各种用户定义的数据点。我无法控制如何存储或更新这些内容。 当我查询列时,它可以返回3个值中的1个: 价值 空值 空字符串 $ 64问题我想使用xpath将这些空字符串作为null返回。 我已经找到了很多有关将null作为空字符串返回的答案,但这种方式一无所获。 当有人删除了值时,它们最终以这种方式结束,而不是删除标签,而是将其空白为<value />标签。当从未设置过该值时,将出现空值。他们没有包括xsi:nil。 我已经完成了一个案例声明: select so.SalesOrderId, Case when sopc.value('(Value)[1]','smalldatetime') IS null then Null when sopc.value('(Value)[1]','smalldatetime') ='' then Null Else sopc.value('(Value)[1]','smalldatetime') End as sopc From SalesOrders so Outer apply so.CustomColumns.nodes('/CustomColumnsCollection/CustomColumn[Name="ProjCompleted"]') sopc(sopc) 但这感觉效率低下,并且这不是唯一的专栏,因此使代码更长且更难维护。 编辑以包括样本数据 SalesOrderId CustomColumns SO 1 "<CustomColumnsCollection> <CustomColumn> <Name>ProjCompleted</Name> <DataType>1</DataType> <Value /> </CustomColumn> …

1
为一个文件夹中的多个.DTSX软件包文件确定PackageFormatVersion
肯尼斯·费舍尔(Kenneth Fisher)发表了一篇博客文章,介绍如何确定我的SSIS包是什么SQL版本?在2015年4月。 它具有一个表,该表将哪个SQL版本映射到PackageFormatVersionXML元数据中找到的哪个SSIS包。在查看1个单个包装时,此功能很有用。 我有一个大约100个SSIS .DTSX软件包的文件夹,我需要知道它们都是哪个SQL版本。 如何批量确定文件夹(文件系统)中PackageFormatVersion多个.DTSX软件包的版本(即SQL版本)? 最终目标是确定要获取并实施以将这些软件包放入其中的正确的TFS版本,因为当前不存在任何源代码控制系统。肯尼斯提出的表格将帮助我回答这个问题,但是首先我需要确认软件包的SQL版本是什么。 假设我没有安装BIDS或SSDT。 假设所需的输出是这样的,其中管道指定一个新列: PackageFilename | PackageFormatVersion -------------------------------------- Package1.dtsx | 3 Package2.dtsx | 4 欢迎使用PowerShell,TSQL,可以抓取目录结构的第三方工具或其他工具。

2
XML解析缓慢
我目前正在尝试调整一个有问题的存储过程,并且我已经注意到,与运行该存储过程相关的大部分成本来自将某些XML解析为临时表的解析。这是有问题的SQL: CREATE TABLE #ChangeSet ( RemarkTypeID TINYINT NOT NULL PRIMARY KEY, RemarkText VARCHAR(2500) NOT NULL, ListingID INT NOT NULL ) INSERT INTO #ChangeSet (RemarkTypeID, RemarkText, ListingID) SELECT T.c.value('@RemarkTypeID[1]','tinyint') AS RemarkTypeID, T.c.value('@RemarkText[1]','varchar(2500)') AS RemarkText, @ListingID FROM @RemarksXml.nodes('/Remarks[1]/Remark') AS T(c) 此外,因此您对要解析的XML的结构有一些了解: <Remarks> <Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211767" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="8" RemarkText="aaaWasher,Dryer,Refriger,Microwav" /> <Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …

1
将XML转换为MySQL表
我有一个采用以下格式的大XML文件,我需要将此文件转换为MySQL表。请让我知道我该怎么做? ~~~~~~~~~~~ <host starttime="1392325468" endtime="1392325486"><status state="up" reason="user-set"/> <address addr="192.168.0.2" addrtype="ipv4"/> <hostnames> </hostnames> <ports><extraports state="filtered" count="2"> <extrareasons reason="no-responses" count="2"/> </extraports> <port protocol="udp" portid="22"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="ssh" method="table" conf="3"/></port> <port protocol="udp" portid="123"><state state="open|filtered" reason="no-response" reason_ttl="0"/><service name="ntp" method="table" conf="3"/></port> </ports> </host> ~~~~~~~~~~~
8 mysql  xml 

1
XML列的IN和NOT IN
我有一个带有xml列的表。Xml类似于 <Root> <Row> <user>abc</user> <Rowid>1</Rowid> </Row> <Row> <user>vf</user> <Rowid>2</Rowid> </Row> <Row> <user>ert</user> <Rowid>3</Rowid> </Row> <Maxrowid>3</Maxrowid> </Root> 现在下面的查询返回sl_no列和myxmlcolumn行包含节点``user''()中具有值``abc''或``xyz''的xml列。查询以下我正在使用类似于sql的IN选项。 SELECT [mytable].[Sl_no], [mytable].[myxmlcolumn] FROM [mydb].dbo.[mytable] WHERE [myxmlcolumn].exist('for $x in /Root/Row where (($x/user[fn:upper-case(.)=(''ABC'',''XYZ'')])) return $x') > 0 我想要类似的查询,其功能与sql'NOT IN'相同。在我的情况下,我希望在xml列的节点“ user”()中不具有值“ abc”或“ xyz”的行。所以请帮我。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.