xml自动元素包装节点的SQL
我有以下代码:xml自动元素包装节点的SQL,sql,sql-server,xml,tsql,for-xml,Sql,Sql Server,Xml,Tsql,For Xml,我有以下代码: SELECT distinct msi.SupplierNumber ,Province.[Name] [ProvinceName] ,District.[Code] [DistrictCode] ,District.[Name] [DistrictName] ,Municipality.[Code] [MunicipalityCode] ,Municipality.[Name] [MunicipalityName] ,City.
SELECT distinct
msi.SupplierNumber
,Province.[Name] [ProvinceName]
,District.[Code] [DistrictCode]
,District.[Name] [DistrictName]
,Municipality.[Code] [MunicipalityCode]
,Municipality.[Name] [MunicipalityName]
,City.[Code] [CityCode]
,City.[Name] [CityName]
,Suburb.[Code] [SuburbCode]
,Suburb.[Name] [SuburbName]
,Ward.[Code] [WardCode]
FROM
dbo.MasterSupplierIdentification msi WITH (NOLOCK)
INNER JOIN dbo.[LinkMasterSupplierCommodity] lmsc WITH (NOLOCK) ON lmsc.MasterSupplierIdentificationID = msi.MasterSupplierIdentificationID
INNER JOIN dbo.[MasterCommodityGroup] mcg WITH (NOLOCK) ON mcg.[MasterCommodityGroupID] = lmsc.MasterCommodityID
INNER JOIN dbo.[MasterCommodityLocation] mcl WITH (NOLOCK) ON mcl.[MasterCommodityID] = mcg.[MasterCommodityID]
INNER JOIN dbo.[MDWard] Ward WITH (NOLOCK) ON Ward.[WardID] = mcl.[WardID]
INNER JOIN dbo.[MDSuburb] Suburb WITH (NOLOCK) ON Suburb.[SuburbID] = Ward.[SuburbID]
INNER JOIN dbo.[MDCity] City WITH (NOLOCK) ON City.[CityID] = Suburb.[CityID]
INNER JOIN dbo.[MDMunicipality] Municipality WITH (NOLOCK) ON Municipality.[MunicipalityID] = City.[MunicipalityID]
INNER JOIN dbo.[MDDistrict] District WITH (NOLOCK) ON District.[DistrictID] = Municipality.[DistrictID]
INNER JOIN dbo.[MDProvince] Province WITH (NOLOCK) ON Province.[ProvinceID] = District.[ProvinceID]
WHERE
msi.SupplierNumber = 'MAAA0000002'
and Suburb.Code = '181001001'
for xml auto, Root('Suppliers'), elements xsinil
返回:
<Suppliers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<msi>
<SupplierNumber>MAAA0000002</SupplierNumber>
<Province>
<ProvinceName>Western Cape</ProvinceName>
<District>
<DistrictCode>105</DistrictCode>
<DistrictName>Central Karoo</DistrictName>
<Municipality>
<MunicipalityCode>181</MunicipalityCode>
<MunicipalityName>Laingsburg</MunicipalityName>
<City>
<CityCode>181001</CityCode>
<CityName>Laingsburg NU</CityName>
<Suburb>
<SuburbCode>181001001</SuburbCode>
<SuburbName>Laingsburg NU</SuburbName>
<Ward>
<WardCode>1</WardCode>
</Ward>
<Ward>
<WardCode>12</WardCode>
</Ward>
<Ward>
<WardCode>2</WardCode>
</Ward>
</Suburb>
</City>
</Municipality>
</District>
</Province>
</msi>
MAAA000002
西开普省
105
中央卡鲁
181
莱因斯堡
181001
莱因斯堡大学
181001001
莱因斯堡大学
1.
12
2.
在这个具体的例子中,病房重复。我希望将其包装在父节点中。似乎唯一的方法是使用子查询,其中我在子查询中指定的不是自动,而是路径和根,并将其作为类型返回。您的最后一句话是正确的。如果要查看父节点中封装的嵌套数据(1:多个关系),则必须将它们作为一个块包含 一个提示:您可以将
与(NOLOCK)
一起使用。除非你真的知道自己在做什么,除非你有很好的理由,否则这是一件危险的事情。非常普遍,但不是很好的做法
像这样尝试(未经测试):
你的最后一句是正确的。如果要查看父节点中封装的嵌套数据(1:多个关系),则必须将它们作为一个块包含 一个提示:您可以将
与(NOLOCK)
一起使用。除非你真的知道自己在做什么,除非你有很好的理由,否则这是一件危险的事情。非常普遍,但不是很好的做法
像这样尝试(未经测试):
非常感谢。诺洛克是一个明确的决定,我知道后果。查询失败了,而且我不是SQL高手,所以即使我理解这个原理,我也无法让查询工作。我得到:“.Net SqlClient数据提供程序:Msg 4104,级别16,状态1,第19行无法绑定多部分标识符“Ward.SuburbID”..Net SqlClient数据提供程序:Msg 421,级别16,状态1,第1行xml数据类型无法选择为DISTINCT,因为它不可比较。”----该类型导致了我理解的DISTINCT问题,但是街区、符号和郊区我没有。@japieson,是的,我没有看到
病房郊区。试试我编辑过的版本。一个可能的问题是,Ward联接下面的联接可能会传递多行。在这种情况下,所有数据都应该嵌套。。。这取决于你。如果无法解决此问题,请尝试不使用DISTINCT并返回。我希望这可以解决您的问题,您可以投票并接受投票计数器下面的检查,ThxDistinct会抛出异常,因为xml是作为类型返回的。如果我删除distinct或type来解决这个问题,那么病房仍然没有被包装。WardXml节点对每个病房重复,因此我仍然没有父病房。我正在展示部分结果:莱因斯堡国立大学10206012001815谢谢。诺洛克是一个明确的决定,我知道后果。查询失败了,而且我不是SQL高手,所以即使我理解这个原理,我也无法让查询工作。我得到:“.Net SqlClient数据提供程序:Msg 4104,级别16,状态1,第19行无法绑定多部分标识符“Ward.SuburbID”..Net SqlClient数据提供程序:Msg 421,级别16,状态1,第1行xml数据类型无法选择为DISTINCT,因为它不可比较。”----该类型导致了我理解的DISTINCT问题,但是街区、符号和郊区我没有。@japieson,是的,我没有看到病房郊区。试试我编辑过的版本。一个可能的问题是,Ward联接下面的联接可能会传递多行。在这种情况下,所有数据都应该嵌套。。。这取决于你。如果无法解决此问题,请尝试不使用DISTINCT并返回。我希望这可以解决您的问题,您可以投票并接受投票计数器下面的检查,ThxDistinct会抛出异常,因为xml是作为类型返回的。如果我删除distinct或type来解决这个问题,那么病房仍然没有被包装。WardXml节点对每个病房重复,因此我仍然没有父病房。我正在显示部分结果:莱因斯堡国立大学10206012001815
SELECT distinct
msi.SupplierNumber
,Province.[Name] [ProvinceName]
,District.[Code] [DistrictCode]
,District.[Name] [DistrictName]
,Municipality.[Code] [MunicipalityCode]
,Municipality.[Name] [MunicipalityName]
,City.[Code] [CityCode]
,City.[Name] [CityName]
,Suburb.[Code] [SuburbCode]
,Suburb.[Name] [SuburbName]
,WardXml.XmlAsBlock
FROM
dbo.MasterSupplierIdentification msi WITH (NOLOCK)
INNER JOIN dbo.[LinkMasterSupplierCommodity] lmsc WITH (NOLOCK) ON lmsc.MasterSupplierIdentificationID = msi.MasterSupplierIdentificationID
INNER JOIN dbo.[MasterCommodityGroup] mcg WITH (NOLOCK) ON mcg.[MasterCommodityGroupID] = lmsc.MasterCommodityID
INNER JOIN dbo.[MasterCommodityLocation] mcl WITH (NOLOCK) ON mcl.[MasterCommodityID] = mcg.[MasterCommodityID]
INNER JOIN dbo.[MDWard] Ward WITH (NOLOCK) ON Ward.[WardID] = mcl.[WardID]
INNER JOIN dbo.[MDSuburb] Suburb WITH (NOLOCK) ON Suburb.[SuburbID] = Ward.[SuburbID]
INNER JOIN dbo.[MDCity] City WITH (NOLOCK) ON City.[CityID] = Suburb.[CityID]
INNER JOIN dbo.[MDMunicipality] Municipality WITH (NOLOCK) ON Municipality.[MunicipalityID] = City.[MunicipalityID]
INNER JOIN dbo.[MDDistrict] District WITH (NOLOCK) ON District.[DistrictID] = Municipality.[DistrictID]
INNER JOIN dbo.[MDProvince] Province WITH (NOLOCK) ON Province.[ProvinceID] = District.[ProvinceID]
CROSS APPLY
(
SELECT WardCode FROM dbo.[MDWard] Ward WITH (NOLOCK)
WHERE Ward.[WardID] = mcl.[WardID]
FOR XML PATH('Ward'),TYPE
) AS WardXml(XmlAsBlock)
WHERE
msi.SupplierNumber = 'MAAA0000002'
and Suburb.Code = '181001001'
for xml auto, Root('Suppliers'), elements xsinil