пятница, 3 октября 2008 г.

SQL и XML

Дорогой блог!

Сегодня я расскажу тебе о том, как переводить данные из SQL Server 2005 сразу в XML.
Для этого в сервере придумали оператор SELECT FOR XML. Он умеет делать из табличек сразу XML, и программистам больше не надо писать много кода C# или VB или других языках, делать датасеты и обрабатывать их.
Я расскажу сегодня о режиме EXPLICIT, потому что он самый интересный и позволяет делать вообще любой XML. Только для этого надо писать много-много селектов и первыми двумя параметрами в них всегда должны стоять целые числа: сначала тэг, а потом родительский тэг. А еще родительский тэг может быть нуллом, тогда этот тэг будет без родителя. Например вот так:
SELECT
1 AS Tag
, NULL AS PARENT
, 'xml text' AS [TestRoot!1!value]
FOR XML EXPLICIT
И этот запрос выдает такой XML:
<TestRoot value="xml text" />

А если нужно тэги вкладывать друг в друга, то приходится писать много селектов и делать им всем юнион, а иерархия тэгов выстраивается полями Tag и Parent. Например можно сделать вот так:
SELECT
1 AS Tag
, NULL AS Parent
, 'xml text' AS [TestRoot!1!value]
, NULL AS [TestChild!2!Name]
, NULL AS [TestChild!2!Code]
UNION
SELECT

2 AS Tag
, 1 AS Parent
, NULL
, 'child text'
, 111
FOR XML EXPLICIT
Вот, тогда мы получим такой XML:
<TestRoot value="xml text" >
<TestChild Name="child text" Code="111" />
</TestRoot>

Дорогой блог, ты наверное уже заметил, что я в первом запросе пишу длинные и неудобные имена столбцов. На самом это я просто говорю, какие имена тэгов и атрибутов надо подставлять в XML: [имя тэга!номер тэга!имя атрибута]. А еще в конце имени столбца можно поставить еще один восклицательый знак и написать еще какую-нибудь опцию вроде HIDE (она нужна, чтобы столбец не отображался в XML, а только был в таблице).

Дорогоуважаемые программисты! Мне очень нравится выгружать мои данные сразу в XML, потому что я использую этот механизм для выгрузки больших объемов в смежную систему. А еще мне очень нравится, что имена столбцов получаются такими эмоциональными и радостными -- столько восклицательных знаков! Немного жаль только, что нельзя ставить еще и вопросительные, но это ничего, я уверен, что в SQL Server 2015 будут и они и еще много других приятных штук :)

До скорых встреч!

2 комментария:

Анонимный комментирует...

Какое счастье, что я завязал писать под платформы Microsoft...

Unknown комментирует...

Ну, бля, зажег:)