Я новичок в SQL и SQL Server Management Studio, так что терпите меня. Вот сокращенная версия моего запроса:
SELECT *
FROM [dbo].[BranchLocations] WHERE NOT (PropertyOwnerType IS NULL)
FOR XML PATH('LocationData'), ROOT('MainRoot')
Это дает мне именно то, что мне нужно, кроме схемы. Я не хочу автоматически создавать схему, потому что служба, в которую я загружаю данные XML, принимает только указанную структуру схемы c, и я бы предпочла управлять ею.
My Схема выглядит примерно так:
<xs:schema id="LocationData_ds" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="LocationData_ds" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="LocationData">
<xs:complexType>
<xs:sequence>
<xs:element name="EntityID" type="xs:string" />
<xs:element name="AddressLine" type="xs:string" minOccurs="0" />
<xs:element name="Locality" type="xs:string" minOccurs="0" />
<xs:element name="AdminDistrict" type="xs:string" minOccurs="0" />
<xs:element name="PostalCode" type="xs:string" minOccurs="0" />
<xs:element name="CountryRegion" type="xs:string" minOccurs="0" />
<xs:element name="Latitude" type="xs:double" minOccurs="0" />
<xs:element name="Longitude" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//LocationData" />
<xs:field xpath="EntityID" />
</xs:unique>
</xs:element>
</xs:schema>
Мой запрос возвращает это:
<MainRoot>
<LocationData>
<EntityID>10010000</EntityID>
<AddressLine>1234 address<\/AddressLine>
<Locality>Converse</Locality>
<AdminDistrict>TX</AdminDistrict>
<PostalCode>12345</PostalCode>
<CountryRegion>US</CountryRegion>
</LocationData>
<LocationData>
<EntityID>70390000</EntityID>
<AddressLine>1234 address<\/AddressLine>
<Locality>Denver</Locality>
<AdminDistrict>CO</AdminDistrict>
<PostalCode>12345</PostalCode>
<CountryRegion>US</CountryRegion>
</LocationData>
...
<MainRoot>
И то, что мне нужно , таково:
(и Мне нужно также включить <?xml version="1.0" encoding="utf-8" standalone="yes"?>
наверху)
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<MainRoot>
<xs:schema id="LocationData_ds" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="LocationData_ds" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="LocationData">
<xs:complexType>
<xs:sequence>
<xs:element name="EntityID" type="xs:string" />
<xs:element name="AddressLine" type="xs:string" minOccurs="0" />
<xs:element name="Locality" type="xs:string" minOccurs="0" />
<xs:element name="AdminDistrict" type="xs:string" minOccurs="0" />
<xs:element name="PostalCode" type="xs:string" minOccurs="0" />
<xs:element name="CountryRegion" type="xs:string" minOccurs="0" />
<xs:element name="Latitude" type="xs:double" minOccurs="0" />
<xs:element name="Longitude" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//LocationData" />
<xs:field xpath="EntityID" />
</xs:unique>
</xs:element>
</xs:schema>
<LocationData>
<EntityID>10010000</EntityID>
<AddressLine>1234 address<\/AddressLine>
<Locality>Converse</Locality>
<AdminDistrict>TX</AdminDistrict>
<PostalCode>12345</PostalCode>
<CountryRegion>US</CountryRegion>
</LocationData>
<LocationData>
<EntityID>70390000</EntityID>
<AddressLine>1234 address<\/AddressLine>
<Locality>Denver</Locality>
<AdminDistrict>CO</AdminDistrict>
<PostalCode>12345</PostalCode>
<CountryRegion>US</CountryRegion>
</LocationData>
...
<MainRoot>
Просмотр документации привел меня сюда:
https://docs.microsoft.com/en-us/sql/t-sql/xml/insert-xml-dml?view=sql-server-ver15
Это не так работает, но я думаю, что я на правильном пути.
Эти ответы относятся только к генерации схемы:
преобразование таблицы базы данных в XML файл схемы
как создать XML схему из существующей базы данных в SQL Server 2008