抱歉,如果还有其他地方,我发现了很多类似的示例,但无法将其用于我的数据。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>
我需要能够提取与CwTicketId字段名称关联的值。
CwTicketId
因此,从本质上讲,我想浏览XML以找到具有的节点fieldName = "CwTicketId"并返回89495或等效值。
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]
我还需要第二个值,但是如果我能弄清楚如何提取一个值,则可以为另一个值重复。
希望有人能帮到我,因为我已经开始撕头发了!
谢谢您的帮助!!
;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)