DECLARE @tbl_XMLResult table
(
Status varchar(50),
Address varchar(100),
ListPrice varchar(25),
SoldPrice varchar(25),
YearBuilt varchar(25),
SF varchar(25),
Acres varchar(25),
OnMarkDate varchar(25),
PendDate varchar(25),
SaleDate varchar(25),
DOM varchar(25)
)
DECLARE @XMLRESULT xml
exec usp_ReportResults @query = "759,905,1048,170,725,80129", @ReportName = "GenReport", @XMLResult = @XMLRESULT OUTPUT
INSERT INTO @tbl_XMLResult(Status, Address, ListPrice, SoldPrice,
YearBuilt, SF, Acres, OnMarkDate, PendDate, SaleDate, DOM)
SELECT
Listing.value('(/ListingStatus/text())[1]', 'varchar(50)') AS Status,
ReportData.value('(/Listing_StreetAddress/text())[1]', 'varchar(50)') AS Address,
Listing.value('(/ListPrice/text())[1]', 'varchar(50)') AS ListPrice,
Listing.value('(/ClosePrice/text())[1]', 'varchar(50)')AS SoldPrice,
Listing.value('(/YearBuilt/text())[1]', 'varchar(50)') AS YearBuilt,
Listing.value('(/TotalLvSpace/text())[1]', 'varchar(50)') AS SF,
Listing.value('(/AcresApx/text())[1]', 'varchar(50)') AS Acres,
Listing.value('(/ListDate/text())[1]', 'varchar(50)') OnMarkDate,
Listing.value('(/PendingDate/text())[1]', 'varchar(50)') AS PendDate,
Listing.value('(/CloseDate/text())[1]', 'varchar(50)') AS SaleDate,
Listing.value('(/DaysOnMarket/text())[1]', 'varchar(50)') DOM
FROM
@XMLRESULT.nodes('/Results/Report/Listings/Listing') AS ListingTable(Listing),
@XMLRESULT.nodes('/Results/Report/Listings/Listing/PMCReportData') AS TempTable(ReportData)
SELECT *
FROM @tbl_XMLResult
我正在尝试以 xml 格式从存储过程中获取结果,并通过读取该结果将其存储到上面创建的临时表中。但是我得到的结果是null
当前存储过程在 xml 中仅返回六条记录,但它在临时表中显示了 36 行,其中包含null
值。如何解决?
这是xml格式:
/
开始时删除 。value()
即这个Listing.value('(/
。CROSS JOIN
发生的情况,因为您在andJOIN
之间使用旧样式语法。您可以通过稍微不同的方式引用 PCMReportData 来做到这一点。ListingTable(Listing)
TempTable(ReportData)
然后根据您的 XML 模式,您应该获取值,例如
你正在做一个
CROSS JOIN
betweenListingTable(Listing)
andTempTable(ReportData)
。因此,6 个结果乘以 6 个内部结果 = 36。