Có một số sai sót:
-
FROM OPENXML đã lỗi thời và không được sử dụng nữa (hiếm có trường hợp ngoại lệ)
-
XML của bạn bao gồm một vùng tên mặc định, vùng này phải được khai báo
-
XPath của bạn sai:
/Return/ReturnData/IRS990ScheduleHIRS990ScheduleH/
phải là/Return/ReturnData/IRS990ScheduleH/
Nhưng dù sao thì bạn cũng nên chuyển sang XQuery
hiện đại các phương pháp. Hãy thử nó như thế này:
--Điều này sẽ đọc XML thành một biến được khai báo.
- chú ý XML của bạn được khai báo bằng utf-8
, điều này có thể dẫn đến sự cố với các ký tự đặc biệt ...
DECLARE @x xml
SELECT @x = R
FROM OPENROWSET (BULK 'C:\Users\USER\990\Example.xml', SINGLE_BLOB) AS ReturnData(R);
--Đây là truy vấn, trước tiên hãy khai báo (các) không gian tên, thay vì sử dụng .nodes()
và .value()
:
WITH XMLNAMESPACES(DEFAULT 'http://www.irs.gov/efile'
,'http://www.w3.org/2001/XMLSchema-instance' AS xsi)
SELECT ct.value('(FinancialAssistancePolicyInd)[1]','int') AS FinancialAssistancePolicyInd
,ct.value('(FPGReferenceDiscountedCareInd)[1]','int') AS FPGReferenceDiscountedCareInd
,ct.value('(FinancialAssistanceAtCostTyp/PersonsServedCnt)[1]','int') AS PersonsServedCnt
,ct.value('(FinancialAssistanceAtCostTyp/NetCommunityBenefitExpnsAmt)[1]','int') AS NetCommunityBenefitExpnsAmt
FROM @x.nodes('/Return/ReturnData/IRS990ScheduleH') AS A(ct)