2016-04-24 2 views
1

Пожалуйста, помогите мне, я получаю нулевое значение для всех столбцов в инструкции select. Я пробовал так много небольших изменений, но до сих пор не получаю нулевые значения.Проблема при чтении xml в хранимой процедуре в SQL Server

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

Смежные вопросы