2013-12-04 9 views
1

У меня есть эта T-SQL скрипт:Чтение XML-данных в хранимой процедуре в SQL Server

DECLARE @idoc int 

DECLARE @doc nvarchar(200) 
SET @doc ='<ArrayOfString> 
      <string>AL</string> 
      <string>DZ</string> 
     </ArrayOfString>' 

    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc; 

    select * 
    FROM OPENXML (@idoc, '/ArrayOfString',2) 
    WITH (string varchar(50)) 
    EXEC sp_xml_removedocument @idoc 

Это хранимая процедура. Я отправляю ему некоторый сериализованный xml (в этом варианте я объявляю его как жесткий код).

Я хочу получить все значения элементов <string>. В этом варианте это должно быть: AL и DZ, но я получаю только «AL». Что это неправильно в моем скрипте?

ответ

2

Если вы хотите использовать OPENXML попробовать это:

DECLARE @idoc int 

DECLARE @doc nvarchar(200) 
SET @doc ='<ArrayOfString> 
      <string>AL</string> 
      <string>DZ</string> 
     </ArrayOfString>' 

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc; 

select * 
    FROM OPENXML (@idoc, '/ArrayOfString/string',2) 
    WITH (string varchar(50) '.') 

EXEC sp_xml_removedocument @idoc 
4
declare @xml xml 
set @xml = '<ArrayOfString 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <string>Dev_1</string> 
    <string>Dev_3</string> 
</ArrayOfString>' 

SELECT 
    T.C.value('.', 'VARCHAR(10)') 
from @xml.nodes('/ArrayOfString/string') T(C) 
+0

Thanks.It в вариант работы хорошо! Но что такое «T.C.value» и T (C) в вашем коде? – IFrizy

+0

"T (C)" является псевдонимом для "@ xml.nodes ('/ ArrayOfString/string')" в последнем утверждении. – somesh

+0

Хорошо! Но если это псевдоним, почему мы пишем «T.C.value»? Извините, если его глупый вопрос! :) – IFrizy

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