9

これが別の場所にある場合は申し訳ありませんが、同様の例をたくさん見つけましたが、データで機能させることができませんでした。2日後、答えが必要です:(

基本的に、XMLデータを含む列を持つSQLServerテーブルがあります。このデータには、抽出する必要のある値が含まれています。

これが私の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>

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
FROM 
    [ksubscribers].[kasadmin].[SDIncident]

2番目の値も必要ですが、一方の値を引き出す方法がわかれば、もう一方の値を複製することができます。

私が髪を引き裂き始めたので誰かが助けてくれることを願っています!

助けてくれてありがとう!!

4

2 に答える 2

10
;WITH XMLNAMESPACES(DEFAULT N'http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd')
select
    T.C.value('data(.)', 'nvarchar(128)')
from [YOUR_TABLE] as Y
    outer apply Y.[YOUR_XML_COLUMN].nodes('/CustomFields/Field[@fieldName="CwTicketId"]') as T(C)
于 2012-10-16T11:35:25.467 に答える
4

これを試して:

;WITH XMLNAMESPACES(DEFAULT N'http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd')
SELECT 
    ref as ServiceDeskID, 
    sdSummary as ServiceDeskSummary,
    CwTicketID = customFields.value('(/CustomFields/Field[@fieldName="CwTicketId"]/text())[1]', 'int')
FROM  
   [ksubscribers].[kasadmin].[SDIncident]

<Field>これにより、フィールド名属性としてが含まれるノードが選択されました。これは、XMLとそのノードの順序に関係なく(CwTicketIdが残っている限り)常に機能します。fieldName CwTicketId

于 2012-10-16T11:50:08.357 に答える