我将值插入table
fromxml
作为:
DECLARE @XMLRESULT XML
DECLARE @tbl_XMLResult TABLE
(
RowID INT IDENTITY(1,1),
Status VARCHAR(50),
Address VARCHAR(250),
ListPrice INT,
SoldPrice INT,
YearBuilt INT
)
EXEC usp_GetReportResult @query = @query, @ReportName = @ReportName, @XMLResult = @XMLRESULT OUTPUT
INSERT INTO @tbl_XMLResult
(
Status,
Address,
ListPrice,
SoldPrice,
YearBuilt
)
SELECT
L.value('(ListingStatus/text())[1]','VARCHAR(50)') AS Status,
L.value('(PMCReportData/Listing_StreetAddress/text())[1]','VARCHAR(250)') AS Address,
L.value('(ListPrice/text())[1]','INT') AS ListPrice,
L.value('(ClosePrice/text())[1]','INT')AS SoldPrice,
L.value('(YearBuilt/text())[1]','INT')AS YearBuilt
FROM @XMLRESULT.nodes('/Results/Report/Listings/Listing')AS Result(L)
但是如上列所示,YearBuilt
数据类型是int
我们存储的只是year
建立在哪个属性上的数据类型。并据此进行后续calculations
操作。但有些时候 for 的值YearBuilt
来自xml
于format
- “新的”
- “0-5岁”
- “70+”
但是当出现上述类型的结果时YearBuilt
,xml
我们得到了conversion error
。需要从上面的结果中获取值,就好像 YearBuilt 一样:
- “新”- 在这里,我们要将当前年份和存储结果视为 2016 当年。
- “0-5 岁”- 0-5 岁。这里考虑上限,即 5。因此将结果存储为 2011 as(2016 - 5 = 2011)
- “70+” - 将 70 视为 => 2016 - 70 年 = 1946
我们如何才能将适当的结果存储到@tbl_xmlResult
从 XML 中获取字符串形式的值,并在 case 语句中执行一些字符串操作。
带有简化 XML 的示例: