У меня есть таблица SQL Server:
CREATE TABLE [dbo].[XMLFiles](
[id] [int] IDENTITY(1,1) NOT NULL,
[XML] [xml] NOT NULL,
[processed] [int] NOT NULL,
[createtime] [datetime] NOT NULL,
[handletime] [datetime] NULL,
[objectId] [varchar](50) NOT NULL,
[ResultText] [varchar](200) NULL,
[BatchID] [varchar](50) NOT NULL,
[Type] [varchar](32) NOT NULL,
CONSTRAINT [PK_XMLFiles] PRIMARY KEY CLUSTERED
Интересными столбцами в этом контексте являются XML и BatchID.BatchID является уникальным идентификатором.Мои XML-данные в столбце XML имеют следующий раздел:
...
<CLASSIFICATION>
<CLASS name="Face Mills Indexable" id="TA_MILL_20_20">
<ATTRIBUTE id="-45001" name="Tool Description" datatype="STRING">T990 d100 highfeed</ATTRIBUTE>
<ATTRIBUTE id="-41210" name="Comments" datatype="STRING"/>
<ATTRIBUTE id="-41101" name="Supplier" datatype="STRING"/>
<ATTRIBUTE id="-45211" name="Plant" datatype="ENUM">4 Lahti</ATTRIBUTE>
<ATTRIBUTE id="160000" name="Machine Tool" datatype="ENUM">BW4 MCR 750</ATTRIBUTE>
<ATTRIBUTE id="-45212" name="Machine Group" datatype="ENUM"/>
<ATTRIBUTE id="-45210" name="Status" datatype="ENUM"/>
...
Допустим, меня интересует значение атрибута где id = "160000", то есть пятый атрибут.Я могу получить значение с помощью SQL-запроса:
SELECT
xml.value('(/PLM_PUBLISH_ITEM/ITEMS/ITEM/CLASSIFICATION/CLASS/ATTRIBUTE)[5]','varchar(30)') AS TCODE
FROM XMLFiles
WHERE batchid = '1553762782573'
Результат верный: BW4 MCR 750
Но я не могу быть уверен, что эта строка всегда является пятой строкой здесь.Поэтому я хотел бы использовать SQL, где я могу указать идентификатор атрибута в качестве критерия поиска.
Примерно так:
SELECT something FROM XMLFiles WHERE BacthID='1553762782573'
AND something = '160000'
Как это получить?У меня закончились идеи ...