Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы 2 / лаб_раб_3 / Лаб раб 7 XML и MS SQL Server 2011 12 04.doc
Скачиваний:
40
Добавлен:
26.04.2015
Размер:
1.2 Mб
Скачать

Методы Query, Value, Exist, Modify и Nodes

Тип данных xml в SQL Server 2008 поддерживает четыре метода, с помощью которых можно запросить или изменить XML-данные.

Метод query используется для извлечения XML-данных с типом данных xml. XML-данные, извлекаемые этим методом, определяются XQuery-выражением, передаваемым в виде параметра.

4. Пример создания переменной типа XML и вывода данных из нее:

/*

В языке Transact SQL:

DECLARE – инструкция для объявления переменной

@ - обозначение переменной

SET – инструкция для присвоения значения переменной

SELECT <переменная или функция> - вывод результата на экран

*/

DECLARE @x xml

SET @x = '<ROOT><a>111</a></ROOT>'

SELECT @x.query('/ROOT/a')

5. Пример создания переменной типа XML и вывода данных из нее, определите разницу в примерах:

DECLARE @x xml

SET @x = '<ROOT><a>111</a><b><a>222</a></b></ROOT>'

SELECT @x.query('/ROOT/a')

Метод value позволяет возвратить из документа XML отдельное значение. Чтобы использовать метод value, необходимо указать XQuery-выражение, определяющее отдельный узел для запроса в XML-данных, а также тип данных Transact-SQL для возвращаемого значения.

6. Пример создания переменной типа XML и вывода данных из нее, определите разницу в примерах:

use AdventureWorksLT

DECLARE @myDoc xml

DECLARE @ProdID int, @ProductName char(15)

SET @myDoc = '<Root>

<ProductDescription ProductID="32" ProductName="Road Bike">

<Features>

<Warranty>1 year parts and labor</Warranty>

</Features>

</ProductDescription>

<ProductDescription ProductID="45" ProductName="Road Black">

<Features>

<Warranty>3 year parts and labor</Warranty>

</Features>

</ProductDescription>

</Root>'

SET @ProdID = @myDoc.value('(/Root/ProductDescription/@ProductID)[2]', 'int' )

SET @ProductName = @myDoc.value('(/Root/ProductDescription/@ProductName)[2]', 'char(15)' )

SELECT @ProdID, @ProductName

С помощью метода exist можно определить, существует ли в документе XML указанный узел. Метод exist возвращает 1 при наличии в документе одного или нескольких экземпляров указанного узла или значение 0, если этот узел не существует.

С помощью метода modify можно обновлять XML-данные с типом данных xml. В методе modify используется три расширения спецификации языка XQuery: insert, replace и delete. Эти расширения носят название XML DML.

7. Пример создания переменной типа XML с последующим редактированием:

DECLARE @myDoc xml

SET @myDoc =

'<Root>

<Location LocationID="10" >

<step>Manufacturing step 1 at this work center</step>

<step>Manufacturing step 2 at this work center</step>

</Location>

</Root>'

SELECT @myDoc

SET @myDoc.modify('insert <!-- some comment -->

after (/Root/Location[@LocationID=10]/step[1])[1]')

SELECT @myDoc;

GO

Результат:

<Root>

<Location LocationID="10">

<step>Manufacturing step 1 at this work center</step>

<!-- some comment -->

<step>Manufacturing step 2 at this work center</step>

</Location>

</Root>

Метод nodes возвращает набор строк, в котором каждый из узлов, указанных XQuery-выражением, возвращается как узел контекста, из которого можно извлекать данные последующими запросами.

8. Пример создания переменной типа XML с использованием метода Nodes():

DECLARE @x xml

SET @x='

<Root>

<row id="1"><name>Larry</name><oflw>some text</oflw></row>

<row id="2"><name>Joe</name></row>

<row id="3" />

</Root>

'

SELECT T.c.value('@id','int') as id,

T.c.query('name') as NAME

FROM @x.nodes('/Root/row') T(c)

GO

Результат:

id NAME

-----------------------

1 <name>Larry</name>

2 <name>Joe</name>

3

9. Пример создания переменной типа XML с использованием метода Convert():

declare @x xml

declare @s varchar(100)

SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>'

set @x =convert (xml, @s)

select @x

10. Пример создания переменной типа XML с передачей данных в нее из реляционной таблицы:

use AdventureWorksLT

Declare @xmlDoc xml

SET @xmlDoc = (SELECT ProductModelID, Name

FROM SalesLT.ProductModel

WHERE ProductModelID=19

FOR XML AUTO, TYPE)

SELECT @xmlDoc

11. Пример создания таблицы с полем типа XML и передачей данных в нее из реляционной таблицы:

use AdventureWorksLT

CREATE TABLE T1 (c1 int, c2 xml)

go

INSERT T1(c1, c2)

SELECT 1, (SELECT ProductModelID, Name

FROM SalesLT.ProductModel

WHERE ProductModelID=19

FOR XML AUTO)

SELECT * FROM T1

go