2013-09-05 2 views
0

Это мой XML:Xml необходимо сохранить в таблице базы данных

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Computer Name="WH7" Processior="Intel(R) Core(TM)2 Duo CPU P9600 @ 2.66GHz" 
      Manufacturer="Dell Inc." Model="Latitude E6500" Domain="WORKGROUP" 
      RAM="3536 MB" ServiceTag="DGQKTJ1"> 
    <BIOS Manufacturer="Dell Inc." Version="Phoenix ROM BIOS PLUS Version 1.10 A19"/> 
</Computer> 

Я хочу, чтобы сохранить корневой узел (т.е. <Computer>) значений атрибутов и значений подузел (т.е. BIOS) в Asset таблице ниже.

Create Table Asset 
(
    AssetId int Identity(100, 1), 
    Name varchar(50), 
    Processor varchar(50), 
    Manufacturer varchar(100), 
    Model varchar(100), 
    Domain varchar(100), 
    RAM varchar(100), 
    ServiceTag varchar(100), 
    Version varchar(100) 
) 

Любой, пожалуйста, помогите мне.

ответ

0

Вы можете легко извлечь информацию из <Computer> узла и вставить его в Asset:
(PS: Обратите внимание: это процессор - не «processior» (не i после двух s))

DECLARE @Input XML 

SET @Input = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Computer Name="WH7" Processor="Intel(R) Core(TM)2 Duo CPU P9600 @ 2.66GHz" 
      Manufacturer="Dell Inc." Model="Latitude E6500" Domain="WORKGROUP" 
      RAM="3536 MB" ServiceTag="DGQKTJ1"> 
    <BIOS Manufacturer="Dell Inc." Version="Phoenix ROM BIOS PLUS Version 1.10 A19"/> 
</Computer>' 

INSERT INTO dbo.Asset(Name, Processor, Manufacturer, Model, Domain, RAM, ServiceTag) 
    SELECT 
     Name = @Input.value('(/Computer/@Name)[1]', 'varchar(50)'), 
     Processor = @Input.value('(/Computer/@Processor)[1]', 'varchar(50)'), 
     Manufacturer = @Input.value('(/Computer/@Manufacturer)[1]', 'varchar(50)'), 
     Model = @Input.value('(/Computer/@Model)[1]', 'varchar(50)'), 
     Domain = @Input.value('(/Computer/@Domain)[1]', 'varchar(50)'), 
     RAM = @Input.value('(/Computer/@RAM)[1]', 'varchar(50)'), 
     ServiceTag = @Input.value('(/Computer/@ServiceTag)[1]', 'varchar(50)') 

Но что совершенно неясно, как вы хотите, чтобы вставить <BIOS> узел в эту таблицу, и как вы будете держать эти два ряда друг от друга - или, если они связаны между собой каким-то образом (так что вы будете знать, какой BIOS принадлежит который компьютер ... ..)

+1

спасибо. работает – Indra

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