2016-09-09 6 views
1

У меня есть параметр @MyXMLString передается в хранимую процедуру в следующем формате:Выберите несколько значений из XML в SQL Server

DECLARE @MyXMLString XML 
SET @MyXMLString = 
'<data formID="2"> 
<UnAssigned AcctTypeID="1"/><UnAssigned AcctTypeID="2"/> 
</data>' 

В хранимой процедуре, я должен получить значение formID и AcctTypeID и затем обновите таблицу.

Теперь будет только один formID, который я могу получить

DECLARE @formID int 
SET @formID = @MyXMLString.value('(data/@formID)[1]','int') 

Но может быть один или несколько AcctTypeID, то есть один или более '<UnAssigned AcctTypeID="1"/>'. Мне нужна помощь в выяснении того, как его получить.

ответ

0

Вы можете получить все экземпляры AcctTypeID, как это:

SELECT 
    XC.value('@AcctTypeID', 'int') 
FROM 
    @MyXMLString.nodes('/data/UnAssigned') AS XT(XC) 

При выполнении этого, эти результаты:

enter image description here

+0

Он возвращает две строки NULL и не принимает фактические значения AcctTypeID. – SilverFish

+0

@SilverFish: тогда вы не показали нам фактический XML, который вы получаете, - с XML, который вы опубликовали, этот код ** работает ** .... Также: будьте осторожны, обработка XML - это случай чувствительный! ** Убедитесь, что все имена элементов и/или атрибутов выполнены правильно! –

0

Это должно работать:

DECLARE @MyXMLString XML 
SET @MyXMLString = 
'<data formID="2"> 
<UnAssigned AcctTypeID="1"/><UnAssigned AcctTypeID="2"/> 
</data>' 

SELECT X.value('../@formID', 'int') FormID, X.value('@AcctTypeID', 'int') AcctTypeID 
FROM @MyXMLString.nodes('data/UnAssigned') T(X) 

Результат

FormID  AcctTypeID 
----------- ----------- 
2   1 
2   2 
+0

Да, это сработало! благодаря – SilverFish

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