标签: xml

如何更新/插入/注入节点到 XML

我有一个应用程序,它在 XML 字段中存储可选的站点信息。

示例表:

CREATE TABLE [dbo].[Sites](
    [SiteID] [int] IDENTITY(1,1) NOT NULL,
    [SiteName] [nvarchar](80) NULL,
    [SiteInfo] [xml] NULL );

INSERT INTO [dbo].[Sites] ([SiteName]) VALUES  ('TestSite1') ; 
Run Code Online (Sandbox Code Playgroud)

如果没有应用属性,则 XML 字段为 NULL。如果这些属性中的任何一个确实适用,则应用程序会插入一个 XML 文档和相关节点。

一个有效的例子如下所示:

<SiteInfo>
  <BoreID>ABC123</BoreID>
  <ConsentCompliance>true</ConsentCompliance>
</SiteInfo>
Run Code Online (Sandbox Code Playgroud)

我需要从另一个系统迁移一些数据,所以我试图将数据插入到这个字段/XML 中。到目前为止,我的尝试导致了应用程序不喜欢的单例节点。

使用我在网上找到的一些示例,我尝试了以下操作:

update [dbo].[Sites] 
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo)') 
where Siteid = 1 
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

消息 2226,级别 16,状态 1,第 1 行 XQuery [dbo.Sites.SiteInfo.modify()]:'insert' 的目标必须是单个节点,找到 'element(SiteInfo,xdt:untyped) *'

问题:

  1. 如果该字段为 NULL,我是否需要先更新该字段以插入 xml 的基数,然后才能插入它?
  2. 不使用开闭对的 XML 节点的名称是什么。 For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/>
  3. 是否有使用 …

sql-server-2008 xml insert

4
推荐指数
1
解决办法
2万
查看次数

如何在 T-SQL 中的节点列表上调用 modify()?

我有一个流程步骤,我在 SQL Server 列中有一个 XML 文档,我需要更改可能多次出现的节点的文本。Modify() with 'replace' DML 仅在单个节点上运行。更复杂的是,需要根据本地维护的查找表进行替换。

我可以使用 nodes() 来获取节点列表并设计一个查询以适当地连接数据,但在那时,我不再有 modify() 可以对其进行操作的引用。

看来我唯一的选择是创建一个 CLR 过程或函数并使用某种 dotnet 本机 XML 迭代。这不太吸引人,因为业务逻辑将被锁定在源代码中,在过程定义中不可见。有什么办法可以专门使用 XML 方法进行这种转换吗?

xml sql-server

4
推荐指数
1
解决办法
2346
查看次数

将字节数组从 XML 转换为 VARBINARY

我将图像文件作为 XML 数据接收,图像的每个字节都是一个带有十进制值的节点,例如对于这个示例 .png 文件1 ,我得到的xml是:

DECLARE @xml XML = N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>
<XmlData>
    <Element>
        <id>Test</id>
        <image>
            <Element>137</Element><Element>80</Element><Element>78</Element><Element>71</Element><Element>13</Element><Element>10</Element><Element>26</Element><Element>10</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>13</Element><Element>73</Element><Element>72</Element><Element>68</Element><Element>82</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>20</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>20</Element><Element>8</Element><Element>6</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>141</Element><Element>137</Element><Element>29</Element><Element>13</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>4</Element><Element>103</Element><Element>65</Element><Element>77</Element><Element>65</Element><Element>0</Element><Element>0</Element><Element>177</Element><Element>143</Element><Element>11</Element><Element>252</Element><Element>97</Element><Element>5</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>9</Element><Element>112</Element><Element>72</Element><Element>89</Element><Element>115</Element><Element>0</Element><Element>0</Element><Element>14</Element><Element>193</Element><Element>0</Element><Element>0</Element><Element>14</Element><Element>193</Element><Element>1</Element><Element>184</Element><Element>145</Element><Element>107</Element><Element>237</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>24</Element><Element>116</Element><Element>69</Element><Element>88</Element><Element>116</Element><Element>83</Element><Element>111</Element><Element>102</Element><Element>116</Element><Element>119</Element><Element>97</Element><Element>114</Element><Element>101</Element><Element>0</Element><Element>112</Element><Element>97</Element><Element>105</Element><Element>110</Element><Element>116</Element><Element>46</Element><Element>110</Element><Element>101</Element><Element>116</Element><Element>32</Element><Element>52</Element><Element>46</Element><Element>48</Element><Element>46</Element><Element>54</Element><Element>252</Element><Element>140</Element><Element>99</Element><Element>223</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>108</Element><Element>73</Element><Element>68</Element><Element>65</Element><Element>84</Element><Element>56</Element><Element>79</Element><Element>99</Element><Element>24</Element><Element>5</Element><Element>184</Element><Element>192</Element><Element>114</Element><Element>32</Element><Element>254</Element><Element>14</Element><Element>196</Element><Element>30</Element><Element>96</Element><Element>30</Element><Element>21</Element><Element>192</Element><Element>126</Element><Element>32</Element><Element>254</Element><Element>15</Element><Element>196</Element><Element>9</Element><Element>96</Element><Element>30</Element><Element>21</Element><Element>192</Element><Element>48</Element><Element>55</Element><Element>80</Element><Element>7</Element><Element>136</Element><Element>29</Element><Element>208</Element><Element>240</Element><Element>121</Element><Element>32</Element><Element>6</Element><Element>25</Element><Element>216</Element><Element>142</Element><Element>36</Element><Element>6</Element><Element>195</Element><Element>34</Element><Element>64</Element><Element>140</Element><Element>23</Element><Element>128</Element><Element>98</Element><Element>19</Element><Element>164</Element><Element>153</Element><Element>88</Element><Element>60</Element><Element>27</Element><Element>136</Element><Element>241</Element><Element>130</Element><Element>213</Element><Element>64</Element><Element>12</Element><Element>242</Element><Element>34</Element><Element>50</Element><Element>126</Element><Element>15</Element><Element>196</Element><Element>32</Element><Element>205</Element><Element>215</Element><Element>145</Element><Element>196</Element><Element>96</Element><Element>56</Element><Element>3</Element><Element>136</Element><Element>73</Element><Element>6</Element><Element>32</Element><Element>141</Element><Element>32</Element><Element>3</Element><Element>71</Element><Element>147</Element><Element>13</Element><Element>249</Element><Element>128</Element><Element>234</Element><Element>6</Element><Element>250</Element><Element>0</Element><Element>113</Element><Element>5</Element><Element>16</Element><Element>43</Element><Element>128</Element><Element>121</Element><Element>163</Element><Element>0</Element><Element>1</Element><Element>24</Element><Element>24</Element><Element>0</Element><Element>127</Element><Element>60</Element><Element>48</Element><Element>197</Element><Element>152</Element><Element>102</Element><Element>243</Element><Element>130</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>0</Element><Element>73</Element><Element>69</Element><Element>78</Element><Element>68</Element><Element>174</Element><Element>66</Element><Element>96</Element><Element>130</Element>
        </image>
    </Element>
</XmlData>'
Run Code Online (Sandbox Code Playgroud)

在二进制中:

SELECT * FROM OPENROWSET(BULK 'C:\test.png', SINGLE_BLOB) AS q;
==========
BulkColumn
----------
0x89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D0D0000000467414D410000B18F0BFC6105000000097048597300000EC100000EC101B8916BED0000001874455874536F667477617265007061696E742E6E657420342E302E36FC8C63DF0000006C49444154384F631805B8C07220FE0EC41E601E15C07E20FE0FC409601E15C030375007881DD0F079200619D88E2406C322408C17806213A499583C1B88F182D5400CF222327E0FC420CDD791C4603803884906208D200347930DF980EA06FA007105102B8079A300011818007F3C30C59866F3820000000049454E44AE426082
Run Code Online (Sandbox Code Playgroud)

如何从 xml 中检索图像文件作为 varbinary?

不久前我也问过类似的问题,所以我尝试了以下查询,但结果二进制数据不正确:

SELECT r.c.value('id[1]', 'varchar(50)') AS id,
CONVERT(VARBINARY(MAX), (SELECT (t.u.value('.','tinyint')) FROM r.c.nodes('image/Element') AS t(u) FOR XML PATH(''))) AS image
FROM @xml.nodes('/XmlData/Element') AS r(c);
=============
id      image
-------------
Test    0x31003300370038003000370038003700310031003300310030003200360031003000300030003000310033003700330037003200360038003800320030003000300032003000300030003000320030003800360030003000300031003400310031003300370032003900310033003000300030003400310030003300360035003700370036003500300030003100370037003100340033003100310032003500320039003700350030003000300039003100310032003700320038003900310031003500300030003100340031003900330030003000310034003100390033003100310038003400310034003500310030003700320033003700300030003000320034003100310036003600390038003800310031003600380033003100310031003100300032003100310036003100310039003900370031003100340031003000310030003100310032003900370031003000350031003100300031003100360034003600310031003000310030003100310031003600330032003500320034003600340038003400360035003400320035003200310034003000390039003200320033003000300030003100300038003700330036003800360035003800340035003600370039003900390032003400350031003800340031003900320031003100340033003200320035003400310034003100390036003300300039003600330030003200310031003900320031003200360033003200320035003400310035003100390036003900390036003300300032003100310039003200340038003500350038003000370031003300360032003900320030003800320034003000310032003100330032003600320035003200310036003100340032003300360036003100390035003300340036003400310034003000320033003100320038003900380031003900310036003400310035003300380038003600300032003700310033003600320034003100310033003000320031003300360034003100320032003400320033003400350030003100320036003100350031003900360033003200320030003500320031003500310034003500310039003600390036003500360033003100330036003700330036003300320031003400310033003200330037003100310034003700310033003200340039003100320038003200330034003600320035003000300031003100330035003100360034003300310032003800310032003100310036003300300031003200340032003400300031003200370036003000340038003100390037003100350032003100300032003200340033003100330030003000300030003000370033003600390037003800360038003100370034003600360039003600310033003000
Run Code Online (Sandbox Code Playgroud)

xml sql-server varbinary

4
推荐指数
1
解决办法
6703
查看次数

是否有可以添加具有任意值的属性的 FOR XML 变体?

我正在尝试创建一个类似于此的查询

SELECT
'foo' AS Detail,
'bar' AS Detail,
'baz' AS Detail
FOR XML PATH ('Header')
Run Code Online (Sandbox Code Playgroud)

生产这样的东西——

<Header>
  <Detail type="A">foo</Detail>
  <Detail type="B">bar</Detail>
  <Detail type="C">baz</Detail>
</Header>
Run Code Online (Sandbox Code Playgroud)

并且似乎无法在不将列值分配给属性的情况下创建属性。

xml sql-server

4
推荐指数
2
解决办法
4984
查看次数

使用默认命名空间和不一致的根节点解析类型化 XML

我有一个结构化的、类型化的 xml 文件。

<WebService xmlns="http://www.orbis-software.com/WebSvcCon">
 <NewLeads>
  <OutputSchema>
  <root xmlns="" type="array">
   <item type="object">
   <SaleProperty type="object">
    <Type type="string">Freehold</Type>
    <PostDistrict type="string">xxx</PostDistrict>
    <Address type="string">address</Address>
     <Value type="number">17.0</Value>
   </SaleProperty>
   <Transaction type="string">SaleOnly</Transaction>
   <Quote type="object">
    <Sale type="object">
     <Fees type="number">450.0</Fees>
     <Disbursements type="number">0.0</Disbursements>
     <StampDuty type="number">0.0</StampDuty>
     <Total type="number">450.0</Total>
    </Sale>
   <Discount type="number">0.0</Discount>
   <VAT type="number">90.0</VAT>
   <Total type="number">540.0</Total>
  </Quote>
  <MoverId type="number">12345678</MoverId>
  <Name type="string">Mr AS</Name>
  <Email type="string">as@yahoo.ppp</Email>
  <Telephone type="string">0123456789</Telephone>
  <Comments type="string">Joint ownership</Comments>
  <EstimatedMoveDate type="string">2015-11-25T05:57:00</EstimatedMoveDate>
  <Charge type="number">4.99</Charge>
  <ChargeStatus type="string">Chargeable</ChargeStatus>
 </item>
</root>
</OutputSchema></NewLeads></WebService>
Run Code Online (Sandbox Code Playgroud)

此外,对象 SaleProperty 可能会丢失,而可能是对象 PurchaseProperty。类似地,对象 Quote 可以包含 Sale、Purchase、Remortgage 对象或同时包含 Sale 和 Purchase 我找不到任何关于通过 SQL Server …

xml sql-server sql-server-2012 xquery

4
推荐指数
2
解决办法
1万
查看次数

将 Web 服务数据引入 SQL Server

我需要每天从托管的 Web 服务中检索数据集。我可以在 SSIS 包中检索 XML“列名”。但是我需要以csv格式检索数据集中的所有数据或直接带入SQL Server。(行和列、标题数据和数据集)。

这在 SSIS 上可行吗?或者有更好的方法吗?非常感谢任何输入或建议。

xml sql-server ssis import web-service

4
推荐指数
1
解决办法
2562
查看次数

为死锁扩展事件读取 system_health event_file 而不是 ring_buffer

我目前正在使用此灾难通过读取system_health扩展事件环形缓冲区来定位最近的死锁。

select top 2000000000
      XEvent.value('@timestamp', 'datetime2(3)') as CreationDateUtc,
      --
      -- Extract the <deadlock>...</deadlock> tag from within the event
      -- Todo: Surely there is a better (xml) way to do this.
      --
      substring(convert(varchar(max), XEvent.query('.')), 
          -- start
          patindex('%<deadlock%', convert(varchar(max), XEvent.query('.'))),          
          -- end
          patindex('%</deadlock%', convert(varchar(max), XEvent.query('.'))) -
              patindex('%<deadlock%', convert(varchar(max), XEvent.query('.'))) + 11 -- 11 to include for '</deadlock>'
          ) AS XdlFile
 from 
    (
      select cast (target_data as xml) as TargetData
        from sys.dm_xe_session_targets st with (nolock)
        join sys.dm_xe_sessions s with (nolock)
          on …
Run Code Online (Sandbox Code Playgroud)

xml sql-server deadlock extended-events sql-server-2012

4
推荐指数
1
解决办法
2257
查看次数

查询 XML 嵌套节点

我需要将每日 XML 文件集成到我的系统中。

XML 文件具有与此类似的架构:

create table txml(id int identity, data xml);
insert into txml (data) values ('
<order>
    <trans DTrans="20170102" HTrans="10:52"></trans>
    <head Id="552665566"></head>
    <lin headId="552665566">
        <dLin Id="00001" CoArt="1111111" CoArtCust="05220001" NameArt="Product1" dateVal="20161115" />
        <acum DCalAcm="20170101" DIniAcm="20161115"><qtyAcm Qty="1101163.00" /></acum>
        <lastOrd Id="95767" QtyLastOrd="12000.00" DLastOrd="20170101" />
        <pLin LType="4"><uni Qty="24000.00"/><dIni Date="20170104"/><dEnd Date="20170108"/></pLin>
        <pLin LType="4"><uni Qty="20000.00"/><dIni Date="20170109"/><dEnd Date="20170112"/></pLin>
        <pLin LType="4"><uni Qty="24000.00"/><dIni Date="20170113"/><dEnd Date="20170116"/></pLin>
    </lin>
    <lin headId="552665566">
        <dLin Id="00002" CoArt="2222222" CoArtCust="05269958" NameArt="Product2" dateVal="20161101" />
        <acum DCalAcm="20170101" DIniAcm="20161101"><qtyAcm Qty="552652.00" /></acum>
       <lastOrd Id="49956" QtyLastOrd="5000.00" DLastOrd="20170101" />
        <pLin LType="4"><uni …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 xml sql-server

4
推荐指数
1
解决办法
4603
查看次数

具有选择性别名的列

我想根据特定的列条件选择别名并输出所需的 XML。

假设我们有一个名为 的表ACCOUNTS

姓名年龄
--------- ---
约翰·多伊 30
玛丽巷 40
爱丽丝鲍勃 50

询问:

;WITH XMLNAMESPACES
(
  'http://www.w3.org/2001/XMLSchema-instance' AS abc, 'uri' AS def
)
SELECT 
     CASE WHEN AGE <= 30 THEN 'BUYER' AS [def:GIRL]
          WHEN AGE >=40 THEN 'SELLER' END AS [def:BOY]
FROM ACCOUNTS
FOR XML PATH('abc:OilCompany'), TYPE
Run Code Online (Sandbox Code Playgroud)

输出应该是:

 <abc:OilCompany>
   <def:GIRL>BUYER</def:GIRL>
   <def:BOY>SELLER</def:BOY>
   <def:BOY>SELLER</def:BOY>
 </abc:OilCompany>
Run Code Online (Sandbox Code Playgroud)

xml sql-server

4
推荐指数
1
解决办法
543
查看次数

如何将 XML 死锁文件转换为图形或可读的东西?

我正在寻找一种简单或易于管理的方式来读取 XML 文件,特别是 SQL Server 死锁的 XML 输出。由于各种原因,我有一些服务器没有受到监控。

我在interwebz 上找到了以下代码,但它的输出只是XML。

CREATE TABLE #errorlog (
                        LogDate DATETIME 
                        , ProcessInfo VARCHAR(100)
                        , [Text] VARCHAR(MAX)
                        );

DECLARE @tag VARCHAR (MAX) , @path VARCHAR(MAX);

INSERT INTO #errorlog EXEC sp_readerrorlog;

SELECT @tag = text
FROM #errorlog 
WHERE [Text] LIKE 'Logging%MSSQL\Log%';

DROP TABLE #errorlog;

SET @path = SUBSTRING(@tag, 38, CHARINDEX('MSSQL\Log', @tag) - 29);

SELECT 
    CONVERT(xml, event_data).query('/event/data/value/child::*') AS DeadlockReport,
    CONVERT(xml, event_data).value('(event[@name="xml_deadlock_report"]/@timestamp)[1]', 'datetime') 
    AS Execution_Time
FROM sys.fn_xe_file_target_read_file(@path + '\system_health*.xel', NULL, NULL, NULL)
WHERE OBJECT_NAME like 'xml_deadlock_report';
Run Code Online (Sandbox Code Playgroud)

有没有办法从这个 T-SQL …

xml sql-server deadlock

4
推荐指数
1
解决办法
6698
查看次数