Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Ниже приведены условия, при которых столбцы наборов строк с соответствующим именем сопоставляются с итоговым XML-документом с учетом регистра:
имя столбца начинается с символа
@;Имя столбца не начинается с знака (
@).Имя столбца не начинается с знака (
@) и содержит знак косой черты (/).несколько столбцов имеют одинаковый префикс;
один из столбцов имеет другое имя.
Имя столбца начинается с знака (@)
Если имя столбца начинается с знака (@) и не содержит знак косой черты (/), создается атрибут row элемента с соответствующим значением столбца. Например, следующий запрос возвращает набор строк с двумя столбцами (@PmId, Name). В результирующем XML PmId атрибут добавляется в соответствующий row элемент, а для него назначается значение ProductModelID .
SELECT ProductModelID as "@PmId",
Name
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Результат:
<row PmId="7">
<Name>HL Touring Frame</Name>
</row>
Атрибуты должны поступать до любых других типов узлов, таких как узлы элементов и текстовые узлы, на том же уровне. Следующий запрос возвращает ошибку:
SELECT Name,
ProductModelID as "@PmId"
FROM Production.ProductModel
WHERE ProductModelID = 7
FOR XML PATH;
Имя столбца не начинается с знака (@)
Если имя столбца не начинается с знака (@), не является одним из тестов узла XPath и не содержит знак косой черты (/), xml-элемент, который является подэлементом элемента строки, row по умолчанию создается.
В результате следующего запроса указывается имя столбца. Дочерний элемент result добавляется к элементу row.
SELECT 2 + 2 as result
for xml PATH;
Результат:
<row>
<result>4</result>
</row>
Следующий запрос задает имя столбца для XML, ManuWorkCenterInformationвозвращаемого XQuery для Instructions столбца типа XML . Элемент ManuWorkCenterInformation добавляется в качестве дочернего к элементу row.
SELECT
ProductModelID,
Name,
Instructions.query(
'declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location
') as ManuWorkCenterInformation
FROM Production.ProductModel
WHERE ProductModelID=7
FOR XML PATH;
Результат:
<row>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuWorkCenterInformation>
<MI:Location ...LocationID="10" ...></MI:Location>
<MI:Location ...LocationID="20" ...></MI:Location>
...
</ManuWorkCenterInformation>
</row>
Имя столбца не начинается с знака (@) и содержит знак косой черты (/)
Если имя столбца не начинается с знака (), но содержит знак косой черты (@/), имя столбца указывает иерархию XML. Например, если имя столбца — "Name1/Name2/Name3.../Namen", каждоеимя i представляет имя элемента, вложенное в текущий элемент строки (для i = 1) или под элементом с именем i-1. Если имяn начинается с @, оно сопоставляется с атрибутом элемента Namen-1 .
Например, следующий запрос возвращает идентификатор сотрудника и имя, представленные в виде сложного элементаEmpName, содержащего FirstMiddleимя и Last имя.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH;
Имена столбцов используются в качестве пути при построении XML-документа в режиме PATH. Имя столбца, содержащее значения идентификатора сотрудника, начинается с "@". Поэтому атрибут EmpIDдобавляется в row элемент. Все остальные столбцы включают знак косой черты (/) в имени столбца, указывающего иерархию. В итоговом XML-документе будет присутствовать дочерний элемент EmpName внутри элемента row, а элемент EmpName будет, в свою очередь, содержать дочерние элементы First, Middle и Last.
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
</row>
Отчество работника имеет значение NULL, которое по умолчанию сопоставляется с отсутствием элемента или атрибута. Если необходимо сформировать элементы для значений NULL, укажите директиву ELEMENTS с ключевым словом XSINIL, как показано в данном запросе.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.Employee E, Person.Contact C
WHERE E.EmployeeID = C.ContactID AND
E.EmployeeID = 1
FOR XML PATH, ELEMENTS XSINIL;
Результат:
<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EmpID="1">
<EmpName>
<First>Gustavo</First>
<Middle xsi:nil="true" />
<Last>Achong</Last>
</EmpName>
</row>
По умолчанию в режиме PATH формируется элементно-ориентированный XML-документ. Поэтому указание директивы ELEMENTS в режиме PATH не имеет никакого смысла. Однако как показано в предыдущем примере, директива ELEMENTS с ключевым словом XSINIL может быть полезна при формировании элементов для значений NULL.
Следующий запрос кроме идентификатора и имени возвращает еще и адрес работника. В соответствии с путем, указанным в именах столбцов адресов, дочерний элемент Address добавляется к элементу row, а подробные сведения об адресе добавляются в качестве дочерних элементов к элементу Address.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
MiddleName "EmpName/Middle",
LastName "EmpName/Last",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City"
FROM HumanResources.Employee E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
Результат:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
<Last>Achong</Last>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
</row>
Несколько столбцов используют один и тот же префикс пути
Если несколько последующих столбцов имеют одинаковый префикс пути, они группируются по одному имени. Если используются разные префиксы пространства имен, даже если они привязаны к одному пространству имен, то путь считается другим. В предыдущем запросе FirstNameMiddleNameстолбцы и LastName столбцы имеют одинаковый EmpName префикс. Поэтому они добавляются в качестве дочерних EmpName элементов. Это справедливо также для случая создания элемента Address, показанного в предыдущем примере.
Один столбец имеет другое имя
Если между столбцами встречается столбец с другим именем, группирование будет нарушено, как это показано в следующем измененном запросе. Запрос разбивает группирование FirstName, MiddleNameи LastName, как указано в предыдущем запросе, путем добавления столбцов адресов между FirstName столбцами и MiddleName столбцами.
SELECT EmployeeID "@EmpID",
FirstName "EmpName/First",
AddressLine1 "Address/AddrLine1",
AddressLine2 "Address/AddrLIne2",
City "Address/City",
MiddleName "EmpName/Middle",
LastName "EmpName/Last"
FROM HumanResources.EmployeeAddress E,
Person.Contact C,
Person.Address A
WHERE E.EmployeeID = C.ContactID
AND E.AddressID = A.AddressID
AND E.EmployeeID = 1
FOR XML PATH;
В результате запрос создает два элемента EmpName. Первый элемент EmpName имеет дочерний элемент FirstName, а второй элемент EmpName имеет дочерние элементы MiddleName и LastName.
Результат:
<row EmpID="1">
<EmpName>
<First>Gustavo</First>
</EmpName>
<Address>
<AddrLine1>7726 Driftwood Drive</AddrLine1>
<City>Monroe</City>
</Address>
<EmpName>
<Last>Achong</Last>
</EmpName>
</row>