Estou inserindo valores em table
from xml
como:
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)
Mas, como mostrado acima, para YearBuilt
a coluna, o tipo de dados está int
no qual estamos armazenando apenas year
em qual propriedade é construída. E, consequentemente, subsequentes calculations
são feitos. Mas algumas vezes os valores para YearBuilt
vêm de xml
como emformat
- "Novo"
- "0-5 anos"
- "70+"
Mas quando o tipo de resultado acima YearBuilt
chega xml
, estamos obtendo conversion error
. Precisa obter valores do resultado acima como se YearBuilt como:
- "Novo" - Aqui queremos considerar o ano atual e armazenar o resultado como 2016 do ano atual.
- "0-5 anos" - 0-5 anos. Aqui, considere o limite superior, ou seja, 5. Portanto, armazene o resultado como 2011 as(2016 - 5 = 2011)
- "70+" - considere 70 como => 2016 - 70 Ano = 1946
Como podemos fazer isso para armazenar o resultado apropriado em@tbl_xmlResult
Obtenha o valor do XML como uma string e faça alguma manipulação de string em uma instrução case.
Exemplo com XML simplificado: