2016-04-24 63 views
1

请帮助我,我为select语句中的所有列获取空值。我已经尝试了很多小的更改,但仍未获得空值。SQL Server中存储过程读取xml中的问题

DECLARE @XML AS XML,@hDoc AS INT, @SQL NVARCHAR (MAX) 
SET @XML = N' <Customer> 
     <CustomerID>4</CustomerID> 
     <Citycode>BBY</Citycode> 
     <TitleCode>1</TitleCode> 
     <AccountTypeCode>SV</AccountTypeCode> 
     <AccRiskCode>A</AccRiskCode> 
     <BankBranchCode>BAU001</BankBranchCode> 
    </Customer>' 

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML 

SELECT 
    CustomerID, Citycode, TitleCode, AccountTypeCode, AccRiskCode, BankBranchCode 
FROM OPENXML(@hDoc, 'Customer') 
WITH 
(
CustomerID int '@CustomerID', 
Citycode [varchar](10) '@Citycode', 
TitleCode int '@TitleCode', 
AccountTypeCode varchar(4) '@AccountTypeCode', 
AccRiskCode varchar(4) '@AccRiskCode', 
BankBranchCode varchar(10) '@BankBranchCode' 
) 

EXEC sp_xml_removedocument @hDoc 
GO 
+0

你映射具有属性但不包含元素的列,只需删除映射名称前面的所有“@”(“@ CustomerID”应该是只是'CustomerID'),那么它工作正常。 –

回答

1

试试这个 - 使用内置的原生的XQuery支持,而不是过时的OPENXML

SELECT 
    ID = XC.value('CustomerID[1]', 'int'), 
    CityCode = XC.value('Citycode[1]', 'varchar(20)'), 
    TitleCode = XC.value('TitleCode[1]', 'int'), 
    AccountTypeCode = XC.value('AccountTypeCode[1]', 'varchar(20)'), 
    AccRiskCode = XC.value('AccRiskCode[1]', 'varchar(20)'), 
    BankBranchCode = XC.value('BankBranchCode[1]', 'varchar(20)') 
FROM 
    @XML.nodes('/Customer') AS XT(XC) 

这将返回的输出:

enter image description here