Intereting Posts
Вызовите функцию доступа вне доступа с помощью VB NET Как удалить значение по умолчанию из столбца в оракуле? Структура базы данных для структуры данных дерева Является ли тип данных CHAR в SQL устаревшим? Когда вы его используете? Почему условие IN было бы медленнее, чем «=» в sql? (Как) я могу использовать «LIKE» в SQL-запросах с помощью MyBatis безопасно и DB-agnostic? Я могу выполнить SSIS на визуальной студии, но это не работает SQL Server 2008 Группа По значению RAND () Проверьте, принадлежит ли метка времени (милли) к определенному дню Вычисление общего времени в месте с SQL Server datetime SQL-программирование, объединяющее 4 строки в 1 и добавление 3 столбцов Использование 'OR' между предложением HAVING и WHERE в MySQL? Копирование данных MySQL и создание новой записи с условием Поддержание порядка в объединении двух упорядоченных по запросам Оператор mysql SELECT IF с OR

TSQL Shred XML – Правильно ли это или есть лучший способ (новичок @ shredding XML)

Хорошо, я C # ASP.NET dev, следуя заказам: Заказы должны брать данный набор данных, уничтожать XML и возвращать столбцы. Я утверждал, что проще сделать измельчение на стороне ASP.NET, где у нас уже есть доступ к таким вещам, как десериализаторы и т. Д., И ко всему комплексу известных типов, но нет, босс говорит: «отбросьте его на сервер, верните набор данных, привяжите набор данных к столбцам gridview «так что пока, я делаю то, что мне сказали. Это все, чтобы уйти от людей, которые придут и скажут «плохие требования».

Задача под рукой:

Вот мой код, который работает и делает то, что я хочу:

DECLARE @table1 AS TABLE ( ProductID VARCHAR(10) , Name VARCHAR(20) , Color VARCHAR(20) , UserEntered VARCHAR(20) , XmlField XML ) INSERT INTO @table1 SELECT '12345','ball','red','john','<sizes><size name="medium"><price>10</price></size><size name="large"><price>20</price></size></sizes>' INSERT INTO @table1 SELECT '12346','ball','blue','adam','<sizes><size name="medium"><price>12</price></size><size name="large"><price>25</price></size></sizes>' INSERT INTO @table1 SELECT '12347','ring','red','john','<sizes><size name="medium"><price>5</price></size><size name="large"><price>8</price></size></sizes>' INSERT INTO @table1 SELECT '12348','ring','blue','adam','<sizes><size name="medium"><price>8</price></size><size name="large"><price>10</price></size></sizes>' INSERT INTO @table1 SELECT '23456','auto','black','ann','<auto><type>car</type><wheels>4</wheels><doors>4</doors><cylinders>3</cylinders></auto>' INSERT INTO @table1 SELECT '23457','auto','black','ann','<auto><type>truck</type><wheels>4</wheels><doors>2</doors><cylinders>8</cylinders></auto><auto><type>car</type><wheels>4</wheels><doors>4</doors><cylinders>6</cylinders></auto>' DECLARE @x XML SELECT @x = ( SELECT ProductID , Name , Color , UserEntered , XmlField.query(' for $vehicle in //auto return <auto type = "{$vehicle/type}" wheels = "{$vehicle/wheels}" doors = "{$vehicle/doors}" cylinders = "{$vehicle/cylinders}" />') FROM @table1 table1 WHERE Name = 'auto' FOR XML AUTO ) SELECT @x SELECT ProductID = T.Item.value('../@ProductID', 'varchar(10)') , Name = T.Item.value('../@Name', 'varchar(20)') , Color = T.Item.value('../@Color', 'varchar(20)') , UserEntered = T.Item.value('../@UserEntered', 'varchar(20)') , VType = T.Item.value('@type' , 'varchar(10)') , Wheels = T.Item.value('@wheels', 'varchar(2)') , Doors = T.Item.value('@doors', 'varchar(2)') , Cylinders = T.Item.value('@cylinders', 'varchar(2)') FROM @x.nodes('//table1/auto') AS T(Item) SELECT @x = ( SELECT ProductID , Name , Color , UserEntered , XmlField.query(' for $object in //sizes/size return <size name = "{$object/@name}" price = "{$object/price}" />') FROM @table1 table1 WHERE Name IN ('ring', 'ball') FOR XML AUTO ) SELECT @x SELECT ProductID = T.Item.value('../@ProductID', 'varchar(10)') , Name = T.Item.value('../@Name', 'varchar(20)') , Color = T.Item.value('../@Color', 'varchar(20)') , UserEntered = T.Item.value('../@UserEntered', 'varchar(20)') , SubName = T.Item.value('@name' , 'varchar(10)') , Price = T.Item.value('@price', 'varchar(2)') FROM @x.nodes('//table1/size') AS T(Item) 

Так что пока, я пытаюсь понять, есть ли лучший способ написать код, чем то, что я делаю сейчас … (У меня есть часть 2, чтобы согласиться с этим …)