Сегодня мы начнем рассматривать достаточно полезную возможность SQL сервера от компании Microsoft – это возможность хранить и обрабатывать данные в формате XML. В данном материале мы рассмотрим основные функции Transact-SQL для обработки данного типа данных.
XML очень популярный тип данных, так как данными такого типа достаточно легко обмениваться со множеством различных приложений, поэтому начинающий программист T-SQL должен иметь представление о том, как хранить эти данные и как их обрабатывать на SQL.
Например, в прошлой статье про журналирование изменений данных таблицы мы хранили старые и новые записи в простом текстовом формате, хотя могли использовать для этого XML.
Итак, приступим, для того чтобы хранить в таблице XML-данные, необходимо выбрать соответствующий тип, он так и называется xml. Запросы будем выполнять в среде Management Studio.
Примечание! Все примеры выполнены в Microsoft SQL Server 2008.
CREATE TABLE [table_test]( [id] [bigint] NOT NULL, [xmldate] [xml] NULL ) ON [PRIMARY] GO
Как видите все просто, мы создали таблицу, в которой два столба:
- Id- идентификатор записи;
- Xmldate – соответственно, какие-то XML данные.
Теперь давайте запишем туда что-нибудь, для этого выполним простой запрос INSERT.
INSERT INTO table_test (id,xmldate) VALUES(1,'<catalog> <name>Иван</name> <lastname>Иванов</lastname> </catalog>')
Здесь мы просто вручную разметили xml документ и записали его в нашу таблицу. Для того чтобы просто увидеть данные в этой таблице, xml отображается в читабельном виде, выполните запрос используя оператор select:
SELECT xmldate FROM table_test
Вы получите данные вида
Функции T-SQL для работы с XML данными
Данные функции называют методами, и начнем мы с метода query.
query – делает выборку в самом xml документе, который хранится в нашей таблице, и принимает он один параметр — это строка запроса к xml документу, т.е. что именно Вы хотите получить из xml. Возвращает также данные типа xml. Например, выше мы создали таблицу, в которой корневой тег catalog, а нам, допустим, нужно получить только тег name, для этого выполните следующий запрос.
SELECT xmldate.query('/catalog/name') FROM table_test
и в ответ Вы получите данные вида.
Надеюсь, смысл этого метода понятен.
Далее рассмотрим функцию modify.
modify – как понятно из названия она изменяет данные xml. Принимает один параметр — это собственно сами инструкции по изменению xml документа. Используется в конструкции update.
Примеры.
Для удаления узла используйте запрос.
UPDATE table_test SET xmldate.modify('delete /catalog/lastname')
Здесь мы удалили узел lastname, для проверки используйте запрос select к данной таблице.
Для вставки узла используйте запрос.
UPDATE table_test SET xmldate.modify('insert <lastname>Иванов</lastname> as last into (/catalog)[1] ')
Здесь мы добавили узел lastname обратно в каталог. Для проверки используйте тот же самый запрос select.
Для обновления значения в узле используйте следующий запрос.
UPDATE table_test SET xmldate.modify('replace value of(/catalog/name[1]/text())[1] with "Сергей" ')
Здесь в первом узле name (ну он у нас один) мы изменили значение «Иван» на «Сергей».
Переходим к методу value.
value – возвращает значения узла. Очень удобно использовать, когда Вы хотите запросом получить не xml документ, а его значения. Принимает два параметра, первый — это откуда брать значение, а второй — какой тип данных Вы при этом хотите получить.
SELECT xmldate.value('/catalog[1]/name[1]','char(50)') FROM table_test
Иногда требуется запросом из таблицы не с xml данными получить данные xml, это тоже можно сделать, например, в следующем запросе мы записываем в переменную типа XML строку таблицы table с идентификатором 2, а затем просто получаем эти значения.
DECLARE @xml xml; SET @xml=(SELECT ID, test FROM table WHERE id=2 FOR XML RAW, TYPE); SELECT @xml; SELECT @xml.value('/row[1]/@ID[1]','int') as id, @xml.value('/row[1]/@test[1]','char(50)') AS text
И еще один пример для наглядности (картинка ниже), он похож на предыдущий, но в нем мы просто подставляем статические данные.
У меня на этом все. Удачи!
Заметка! Для комплексного изучения языка SQL и T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, которые помогут Вам «с нуля» научиться работать с SQL и программировать на T-SQL в Microsoft SQL Server.