相关疑难解决方法(0)

SQL Server查询元素值的xml属性

对不起,如果这是在其他地方,我发现了很多类似的例子,但我一直无法使用我的数据.2天后,我需要一个答案:(

基本上有一个SQL Server表,其中包含一个包含XML数据的列.此数据包含我需要提取的值.

这是我的XML.

  <CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd">
    <Field fieldName="AutoCategory">Event Log</Field>
    <Field fieldName="SType">Event Log</Field>
    <Field fieldName="STag1">AgentGuid</Field>
    <Field fieldName="STag2">AlertRegistrationId</Field>
    <Field fieldName="STag3">LogType</Field>
    <Field fieldName="SValue1">619764177412541</Field>
    <Field fieldName="SValue2">104</Field>
    <Field fieldName="SValue3">1380569194</Field>
    <Field fieldName="SdTicketId">RPSv1006330</Field>
    <Field fieldName="AgentName">bla bla</Field>
    <Field fieldName="MachineGroupGuid">86115414719112271316891312</Field>
    <Field fieldName="OrgFk">59165166782128125214185317</Field>
    <Field fieldName="GuidAgent">619764177412541</Field>
    <Field fieldName="AlertCount">0</Field>
    <Field fieldName="TicketTitle">bla bla</Field>
    <Field fieldName="LegacyId">152262</Field>
    <Field fieldName="LegacyRef">152262</Field>
    <Field fieldName="CwStatus">2</Field>
    <Field fieldName="CwTicketId">89495</Field>
</CustomFields>
Run Code Online (Sandbox Code Playgroud)

我需要能够提取与CwTicketId字段名称关联的值.

所以从本质上讲,我想通过XML来查找带有fieldName = "CwTicketId"和返回的节点89495或等价值.

下面是我自己提出的代码,它将值拉出来,但问题是有时XML的排序方式不同,因此值并不总是在我指定的行上,因此它返回准确的数据.

;WITH XMLNAMESPACES(DEFAULT N'http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd')
SELECT 
    ref as ServiceDeskID, 
    sdSummary as ServiceDeskSummary,
    customFields.value('(/CustomFields/Field/node())[17]', 'varchar(100)') as LegacyIDTicketing,
    customFields.value('(/CustomFields/Field/node())[19]', 'varchar(100)') as CWIDTicketing …
Run Code Online (Sandbox Code Playgroud)

xml sql t-sql sql-server xquery

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

TSQL FOR XML格式

我有一个表,我想转换成XML格式.该表称为tempTable,并保存数据:

REF     DESC     QTY
100001  Normal   1
100002  OOH      1
Run Code Online (Sandbox Code Playgroud)

我需要以这种给定的格式创建XML:

<row>
  <LIN NUM="1">
    <FLD NAME="REF">100001</FLD>
    <FLD NAME="DES">Normal</FLD>
    <FLD NAME="QTY">1</FLD>
  </LIN>
  <LIN NUM="2">
    <FLD NAME="REF">100002</FLD>
    <FLD NAME="DES">OOH</FLD>
    <FLD NAME="QTY">1</FLD>
  </LIN>
</row>
Run Code Online (Sandbox Code Playgroud)

我试过以下代码:

SET @line = (SELECT '1' AS '@NUM', REF AS 'REF', DES AS 'DES', QTY AS 'QTY' FROM tempTable WHERE ORDER= @ORDER
FOR XML PATH('LIN'))

SELECT @line
FOR XML PATH
Run Code Online (Sandbox Code Playgroud)

然而,这会产生:

<row>
  <LIN NUM="1">
    <REF>100001</REF>
    <DES>Normal</DES>
    <QTY>1</QTY>
  </LIN>
  <LIN NUM="1">
    <REF>100002</REF>
    <DES>OOH</DES>
    <QTY>1</QTY>
  </LIN>
</row>
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎么做:

  • A)根据该订单的记录数,将"LIN"'NUM'属性更改为增量?
  • B)将'Name'属性添加到'LIN'细节并将字段名称更改为'FLD'.当我尝试将名称更改为"FLD"时,它将值汇总到一个节点上,如下所示:

    <row> …
    Run Code Online (Sandbox Code Playgroud)

xml t-sql sql-server for-xml-path

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

标签 统计

sql-server ×2

t-sql ×2

xml ×2

for-xml-path ×1

sql ×1

xquery ×1