none
SQLSERVER 2008 com XML. RRS feed

  • Pergunta

  • Pessoal gostaria de saber como faço para resolver uma questão que pede para inserir um arquivo xml em uma tabela. Segue abaixo o enunciado da questão. O banco de dados que estou usando é o sql server 2008 R2. E o utilizo o sql server management studio.

    Crie um arquivo XML com uma estrutura qualquer e mostre o comando necessário para inserir
    este arquivo em uma Tabela com a estrutura abaixo:
    Tabela: TesteXML (Identificador int, ArquivoXML xml);

    Agradeceria muito, se alguém pudesse me ajudar, e se possível postando algum exemplo para melhor entendimento.

    • Movido Gustavo Maia Aguiar domingo, 22 de abril de 2012 04:14 (De:SQL Server - Desenvolvimento Geral)
    sexta-feira, 20 de abril de 2012 16:42

Respostas

Todas as Respostas

  • Edyfran,

    Veja se estes exemplos podem ajudar?

    declare @dadosxml xml
    set @dadosxml = '<?xml version="1.0"?>
    <root>
    <cliente id="1">
    <prod id="321"/>
    <prod id="543"/>
    <prod id="762"/>
    <prod id="325"/>
    </cliente>
    <cliente id="2">
    <prod id="289"/>
    <prod id="776"/>
    <prod id="335"/>
    <prod id="1020"/>
    </cliente>
    </root>'
    --print convert(nvarchar(4000),@dadosxml)
    SELECT
    t.c.value('../@id[1]','int') as IdCliente,
    t.c.value('@id[1]','int') as IdProduto
    FROM
    @dadosxml.nodes('/root/cliente/prod') as t(c)
    dECLARE @x xml 
    SET @x='<Root>
        <row id="1"><name>Larry</name><oflw>some text</oflw></row>
        <row id="2"><name>moe</name></row>
        <row id="3" />
    </Root>'
    SELECT T.c.query('.') AS result
    FROM   @x.nodes('/Root/row') T(c)
    GO

    USE AdventureWorks
    GO
    -- <XML DataType>
    /* 
      Vamos criar uma tabela para testes com uma coluna XML, inicialmente a 
      tabela não usa um Schema para validação do XML que será inserido na tabela
      portanto chamamos este XML de XML UnTyped, veremos alguns exemplos de XML Typed
      daqui a pouco.
    */
    IF OBJECT_ID('Prods') IS NOT NULL
      DROP TABLE Prods
    GO
    CREATE TABLE Prods (ID Int IDENTITY(1,1) PRIMARY KEY, ColunaXML XML NOT NULL)
    -- Exemplo de um INSERT simples.
    INSERT INTO Prods(ColunaXML) VALUES('<Raiz>
                                           <Codigo>1</Codigo>
                                           <Nome>Nome de Algum Produto</Nome>
                                         </Raiz>')
    -- Aqui podemos reparar que o SQL Server verifica se o documento XML
    -- está bem formatado, no exemplo abaixo eu inicio a tag "Raiz" mas não finalizo ela
    -- o SQL detecta isso e gera um erro ao tentar efetuar o INSERT.
    INSERT INTO Prods(ColunaXML) VALUES('<Raiz>
                                           <Codigo>1</Codigo>
                                           <Nome>Nome de Algum Produto</Nome>
                                         <Raiz>')
    -- Outro exemplo de validação do XML, o campo R da tag "Raiz" é iniciado com R maiúsculo
    -- e finalizado com r minúsculo
    INSERT INTO Prods(ColunaXML) VALUES('<Raiz>
                                           <Codigo>1</Codigo>
                                           <Nome>Nome de Algum Produto</Nome>
                                         </raiz>')
    -- Vizualiza os dados da tabela
    SELECT * FROM Prods
    GO
    -- Exemplo de uso de uma varíável XML
    DECLARE @vXML XML
    SET @vXML = '<Raiz>
                   <Codigo>1</Codigo>
                   <Nome>Nome de Algum Produto</Nome>
                 </Raiz>'
    SELECT @vXML
    GO
    -- Inserindo dados na tabela Prods utilizando uma váriável XML
    DECLARE @vXML XML
    SET @vXML = '<Raiz>
                   <Codigo>2</Codigo>
                   <Nome>2 Nome de Algum Produto</Nome>
                 </Raiz>'
    INSERT INTO Prods(ColunaXML) VALUES(@vXML)
    GO
    -- </XML DataType>
    -- Importanto um documento XML direto para uma tabela
    CREATE TABLE #TMP (ID Int IDENTITY(1,1), ColunaXML XML NOT NULL)
    DECLARE @x XML
    SET @X = (SELECT * 
                FROM OPENROWSET(BULK 'C:\Documents and Settings\fabiano\Desktop\xml\Produtos.xml',
                                SINGLE_BLOB) AS A)
    -- Exibe o XML
    SELECT @X
    INSERT INTO #TMP(ColunaXML) VALUES(@X)
    GO
    SELECT * FROM #TMP
    -- Ou então poderiamos ter incluido direto na tabela, sem usar a variável.
    INSERT INTO #TMP(ColunaXML)
    SELECT * 
      FROM OPENROWSET(BULK 'C:\Documents and Settings\fabiano\Desktop\xml\Produtos.xml',
                      SINGLE_BLOB) AS A
    GO
    SELECT * FROM #TMP
    GO


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 20 de abril de 2012 17:11
  • Júnior, onde estaria o arquivo xml?
    sexta-feira, 20 de abril de 2012 19:55
  • Bom Dia,

    Sugiro os seguintes links (em especial o primeiro):

    Como importar arquivos XML para o SQL Server – Parte I
    http://gustavomaiaaguiar.wordpress.com/2009/01/30/como-importar-arquivos-xml-para-o-sql-server-parte-i/

    Como importar arquivos XML para o SQL Server – Parte II
    http://gustavomaiaaguiar.wordpress.com/2009/02/05/como-importar-arquivos-xml-para-o-sql-server-parte-ii/

    Como importar arquivos XML para o SQL Server – Parte III
    http://gustavomaiaaguiar.wordpress.com/2009/02/10/como-importar-arquivos-xml-para-o-sql-server-parte-iii/

    Como importar arquivos XML para o SQL Server – Parte IV
    http://gustavomaiaaguiar.wordpress.com/2009/02/12/como-importar-arquivos-xml-para-o-sql-server-parte-iv/

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Sugerido como Resposta Gustavo Maia Aguiar quarta-feira, 25 de abril de 2012 13:35
    • Marcado como Resposta edyfran quarta-feira, 25 de abril de 2012 17:43
    quarta-feira, 25 de abril de 2012 13:35

  •  Galera boa tarde, eu estou tentando fazer uma ligação de um arquivo XML e sql atraves do microsoft sql server management studio. Eu criei um arquivo XML e coloquei o comando 
    DECLARE @var xml
    SELECT @var = (select * from openrowset (bulk
    'C:\Users\Edyfran\Documents\livraria.xml',single_clob) as TesteXML1)
    agora eu quero inserir dados na minha tabela
    como faço isso?
    eu sei que o comande é INSERT INTO TesteXML1 VALUES (@var)
    só que não estou sabendo o que colocar entre os parenteses
    alguém pode me ajudar?


    quarta-feira, 25 de abril de 2012 17:45