我想返回PackageUOM为'EA'的Dimensions。目前,我仅获得第一个子节点,这会导致问题!
我知道,仅当PackageUOM为EA时,我才想拉伸尺寸,我不确定该怎么做。任何帮助,将不胜感激。谢谢。
供参考,这在SQL 2014中
<Packages>
<Package MaintenanceType="A">
<PackageUOM>PL</PackageUOM>
<QuantityofEaches>50</QuantityofEaches>
<Orderable>Y</Orderable>
<Dimensions UOM="IN">
<Height>40.7500</Height>
<Width>42.0000</Width>
<Length>48.0000</Length>
</Dimensions>
</Package>
<Package MaintenanceType="A">
<PackageUOM>EA</PackageUOM>
<QuantityofEaches>1</QuantityofEaches>
<Orderable>Y</Orderable>
<Dimensions UOM="IN">
<Height>7.2500</Height>
<Width>17.0000</Width>
<Length>10.2500</Length>
</Dimensions>
<Weights UOM="PG">
<Weight>8.8400</Weight>
</Weights>
</Package>
</Packages>
SELECT *
FROM OPENXML(@handle, 'a:PIES/a:Items/a:Item',2)
WITH (
[TestFile] varchar(max) '../../a:TestFile',
[PIESVersion] varchar(max) '../../a:Header/a:PIESVersion',
[SubmissionType] varchar(max) '../../a:Header/a:SubmissionType',
[LanguageCode] varchar(max) '../../a:Header/a:LanguageCode',
[TechnicalContact] varchar(max) '../../a:Header/a:TechnicalContact',
[ContactEmail] varchar(max) '../../a:Header/a:ContactEmail',
[PCdbVersionDate] varchar(max) '../../a:Header/a:PCdbVersionDate',
[PAdbVersionDate] varchar(max) '../../a:Header/a:PAdbVersionDate',
[ItemLevelGTIN] varchar(max) 'a:ItemLevelGTIN',
[PartNumber] varchar(max) 'a:PartNumber',
[BrandAAIAID] varchar(max) 'a:BrandAAIAID',
[BrandLabel] varchar(max) 'a:BrandLabel',
[SubBrandAAIAID] varchar(max) 'a:SubBrandAAIAID',
[SubBrandLabel] varchar(max) 'a:SubBrandLabel',
[PartTerminologyID] varchar(max) 'a:PartTerminologyID',
[PackageUOM] varchar(max) 'a:Packages/a:Package/a:PackageUOM',
[PackageQuantityofEaches] varchar(max) 'a:Packages/a:Package/a:QuantityofEaches',
[PackageDimensionUOM] varchar(10) 'a:Packages/a:Package/a:Dimensions/@UOM',
[PackageHeight] decimal(9,4) 'a:Packages/a:Package/a:Dimensions/a:Height',
[PackageWidth] decimal(9,4) 'a:Packages/a:Package/a:Dimensions/a:Width',
[PackageLength] decimal(9,4) 'a:Packages/a:Package/a:Dimensions/a:Length',
[PackageWeightUOM] varchar(max) 'a:Packages/a:Package/a:Weights/@UOM',
[PackageWeight] decimal(9,4) 'a:Packages/a:Package/a:Weights/a:Weight',
[PackageUPC] varchar(max) 'a:Packages/a:Package/a:PackageLevelGTIN'
) A
WHERE A.[PartNumber]='OW7168'
答案 0 :(得分:2)
您是否正在寻找类似以下的内容?
Declare @x xml = '<Packages>
<Package MaintenanceType="A">
<PackageUOM>PL</PackageUOM>
<QuantityofEaches>50</QuantityofEaches>
<Orderable>Y</Orderable>
<Dimensions UOM="IN">
<Height>40.7500</Height>
<Width>42.0000</Width>
<Length>48.0000</Length>
</Dimensions>
</Package>
<Package MaintenanceType="A">
<PackageUOM>EA</PackageUOM>
<QuantityofEaches>1</QuantityofEaches>
<Orderable>Y</Orderable>
<Dimensions UOM="IN">
<Height>7.2500</Height>
<Width>17.0000</Width>
<Length>10.2500</Length>
</Dimensions>
<Weights UOM="PG">
<Weight>8.8400</Weight>
</Weights>
</Package>
</Packages>'
select node.value('(Dimensions/Height/text())[1]', 'VARCHAR(20)') AS [Height],
node.value('(Dimensions/Width/text())[1]', 'VARCHAR(20)') AS [Width],
node.value('(Dimensions/Length/text())[1]', 'VARCHAR(20)') AS [Length]
from @x.nodes('/Packages/Package[PackageUOM/text() = "EA"]') AS nodes(node);
通过这种方式,您可以过滤出PackageUOM = 'EA'
的数据
并获取该记录的维度为3列
还请注意,我放置了'VARCHAR(20)'而不是'DECIMAL(18,4)',以避免由于任何非数字数据作为计量单位(例如米)而导致崩溃。