Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gilberto Júnior

XML no SQL Server 2000

Recommended Posts

Olá pessoal. Estou precisando criar um arquivo xml de algumas partes do banco de dados aqui da empresa. Já consegui fazer o trabalho no ORACLE mas aparentemente no SQL server é bem mais complicado. No Oracle, consegui fazer utilizando a API do DOM, via select mesmo. No SQL Server, pelo que achei em minhas pesquisas, o suporte ao DOM é feito apenas via programação (podemos por exemplo, criar um script ActiveX e executá-lo via Enterprise Manager) e não via SELECTSei que existe o comando FOR XML mas o mesmo é muito complicato de usar para um select com muitos filhos como é o meu caso. Cheguei à conclusão que o melhor tipo desse select seria o FOR XML EXPLICIT pois preciso manter a hierarquia dos dados. Mas, com aqueles unions todos tá ficando muito complicado.Será que tem alguém que conheça uma maneira melhor de fazer isso? Ou mesmo que possa me dar uma luz com o FOR XML?Abaixo segue a estrutura que preciso montar...Vejam que a coisa é complicada mesmo.. Muito obrigado pela atenção e até logo.<?xml version="1.0" encoding="ISO-8859-1"?><CONJUNTO_PLANO_OPERACIONAL> <PLANO_OPERACIONAL> <!-- Representa um Plano Operacional --> <ABA_DESCRICAO> <!-- Dados da aba Descrição --> <!-- Exercício do Plano Operacional --> <!-- Tipo = inteiro / Tamanho = 4 --> <EXERCICIO> </EXERCICIO> <DESCRICAO> <UA> <!-- Unidade Responsável --> <!-- Tipo da Unidade --> <!-- Tipo = String / Tamanho = 1 Valores possíveis: U - UG R - UGR O - Unidade --> <TIPO_UA> </TIPO_UA> <!-- Número da Unidade --> <!-- Tipo = String / Tamanho = 6 (Usado somente para UG e UGR) --> <NUMERO_UA> </NUMERO_UA> <!-- Sigla da Unidade --> <!-- Tipo = String / Tamanho = 30 --> <SIGLA_UA> </SIGLA_UA> </UA> <!-- Descrição do Plano Operacional --> <!-- Tipo = String / Tamanho = 2000 --> <DESCRICAO_PO> </DESCRICAO_PO> <!-- Nome do Plano Operacional --> <!-- Tipo = String / Tamanho = 100 --> <NOME> </NOME> <!-- Sigla do Plano Operacional --> <!-- Tipo = String / Tamanho = 20 --> <SIGLA> </SIGLA> </DESCRICAO> </ABA_DESCRICAO> <ABA_ORCAMENTO> <!-- Dados da aba Orçamento --> <ORCAMENTO> <!-- Representa um registro no Orçamento do Plano Operacional --> <!-- Código do item orçamentário --> <!-- Tipo = String / Tamanho = 2000 --> <CODIGO_ITEM_ORCAMENTARIO> </CODIGO_ITEM_ORCAMENTARIO> <!-- Descrição do item orçamentário --> <!-- Tipo = String / Tamanho = 2000 --> <DESCRICAO_ITEM_ORCAMENTARIO> </DESCRICAO_ITEM_ORCAMENTARIO> <!-- Componente do orçamento --> <!-- Tipo = String / Tamanho = 2000 --> <COMPONENTE> </COMPONENTE> <UA> <!-- Unidade Patrocinadora --> <!-- Tipo da Unidade --> <!-- Tipo = String / Tamanho = 1 Valores possíveis: U - UG R - UGR O - Unidade --> <TIPO_UA> </TIPO_UA> <!-- Número da Unidade --> <!-- Tipo = String / Tamanho = 6 (Usado somente para UG e UGR) --> <NUMERO_UA> </NUMERO_UA> <!-- Sigla da Unidade --> <!-- Tipo = String / Tamanho = 30 --> <SIGLA_UA> </SIGLA_UA> </UA> <!-- Tipo do gasto --> <!-- Tipo = String / Tamanho = 1 Valores possíveis: C - Custeio I - Investimento O - Outros Tipos --> <TIPO_GASTO> </TIPO_GASTO> <!-- PTRES --> <!-- Tipo = String / Tamanho = 6 --> <PTRES> </PTRES> <!-- Fonte de Recurso --> <!-- Tipo = String / Tamanho = 11 / Formato = 0000.000000 --> <FTE> </FTE> <!-- Valor --> <!-- Tipo = ponto flutuante / Tamanho = 17 / Casas decimais = 2 --> <VALOR> </VALOR> </ORCAMENTO> </ABA_ORCAMENTO> <ABA_ESTRUTURA_ORGANIZACIONAL> <!-- Dados da aba Estrutura Organizacional --> <ESTRUTURA_ORGANIZACIONAL> <!-- Representa um registro na Estrutura Organizacional do Plano Operacional --> <!-- Ator --> <!-- Tipo = String / Tamanho = 20 --> <ATOR> </ATOR> <!-- Pessoa Física --> <!-- Tipo = String / Tamanho = 14 / Formato = 999.999.999-99 --> <PESSOA> </PESSOA> <!-- Papel --> <!-- Tipo = String / Tamanho = 60 --> <PAPEL> </PAPEL> <!-- Quantidade --> <!-- Tipo = ponto flutuante / Tamanho = 8 / Casas decimais = 0 --> <QUANTIDADE> </QUANTIDADE> <!-- Dedicação --> <!-- Tipo = String / Tamanho = 20 --> <DEDICACAO> </DEDICACAO> </ESTRUTURA_ORGANIZACIONAL> </ABA_ESTRUTURA_ORGANIZACIONAL> <ABA_ESTRUTURA_ATIVIDADES> <!-- Dados da aba Estrutura de Atividades --> <ESTRUTURA_ATIVIDADES> <!-- Representa um registro na Estrutura de Atividades do Plano Operacional --> <!-- Código da atividade --> <!-- Tipo = String / Tamanho = 20 --> <CODIGO> </CODIGO> <!-- Código agregador --> <!-- Tipo = String / Tamanho = 2000 --> <CODIGO_AGREGADOR> </CODIGO_AGREGADOR> <UA> <!-- Unidade da atividade --> <!-- Tipo da Unidade --> <!-- Tipo = String / Tamanho = 1 Valores possíveis: U - UG R - UGR O - Unidade --> <TIPO_UA> </TIPO_UA> <!-- Número da Unidade --> <!-- Tipo = String / Tamanho = 6 (Usado somente para UG e UGR) --> <NUMERO_UA> </NUMERO_UA> <!-- Sigla da Unidade --> <!-- Tipo = String / Tamanho = 30 --> <SIGLA_UA> </SIGLA_UA> </UA> <!-- Tipo da atividade --> <!-- Tipo = String / Tamanho = 1 Valores possíveis: A - Analítico G - Agregador --> <TIPO> </TIPO> <!-- Código do item orçamentário da atividade --> <!-- Tipo = String / Tamanho = 2000 --> <CODIGO_ITEM_ORCAMENTARIO> </CODIGO_ITEM_ORCAMENTARIO> <!-- Descrição da atividade --> <!-- Tipo = String / Tamanho = 200 --> <DESCRICAO_ATIVIDADE> </DESCRICAO_ATIVIDADE> <!-- Nome da atividade --> <!-- Tipo = String / Tamanho = 60 --> <NOME_ATIVIDADE> </NOME_ATIVIDADE> <!-- Data inicial da atividade --> <!-- Tipo = Data / Tamanho = 10 / Formato = dd/mm/aaaa --> <DATA_INICIAL> </DATA_INICIAL> <!-- Data final da atividade --> <!-- Tipo = Data / Tamanho = 10 / Formato = dd/mm/aaaa --> <DATA_FINAL> </DATA_FINAL> </ESTRUTURA_ATIVIDADES> </ABA_ESTRUTURA_ATIVIDADES> <ABA_AQUISICAO> <!-- Dados da aba Aquisição --> <AQUISICAO> <!-- Representa uma Aquisição do Plano Operacional --> <!-- Insumo da aquisição --> <!-- Tipo = String / Tamanho = 8 --> <INSUMO> </INSUMO> <!-- Descrição da aquisição --> <!-- Tipo = String / Tamanho = 2000 --> <DESCRICAO_AQUISICAO> </DESCRICAO_AQUISICAO> <!-- Data da aquisição --> <!-- Tipo = Data / Tamanho = 10 / Formato = dd/mm/aaaa --> <DATA_AQUISICAO> </DATA_AQUISICAO> <UA> <!-- Unidade da aquisição --> <!-- Tipo da Unidade --> <!-- Tipo = String / Tamanho = 1 Valores possíveis: U - UG R - UGR O - Unidade --> <TIPO_UA> </TIPO_UA> <!-- Número da Unidade --> <!-- Tipo = String / Tamanho = 6 (Usado somente para UG e UGR) --> <NUMERO_UA> </NUMERO_UA> <!-- Sigla da Unidade --> <!-- Tipo = String / Tamanho = 30 --> <SIGLA_UA> </SIGLA_UA> </UA> <!-- Componente da aquisição --> <!-- Tipo = String / Tamanho = 2000 --> <COMPONENTE> </COMPONENTE> <!-- Atividade da aquisição --> <!-- Tipo = String / Tamanho = 2000 --> <ATIVIDADE> </ATIVIDADE> <!-- Quantidade da aquisição --> <!-- Tipo = ponto flutuante / Tamanho = 9 / Casas decimais = 2 --> <QUANTIDADE> </QUANTIDADE> <!-- Valor unitário da aquisição --> <!-- Tipo = ponto flutuante / Tamanho = 17 / Casas decimais = 2 --> <VALOR_UNITARIO> </VALOR_UNITARIO> </AQUISICAO> </ABA_AQUISICAO> <ABA_INDICADORES_DESEMPENHO> <!-- Dados da aba Indicadores de Desempenho --> <INDICADOR_DESEMPENHO> <!-- Representa um Indicador de Desempenho do Plano Operacional --> <!-- Variável de desempenho usada pelo indicador --> <!-- Tipo = String / Tamanho = 50 --> <VARIAVEL_DESEMPENHO> </VARIAVEL_DESEMPENHO> <!-- Data de medição do indicador prevista --> <!-- Tipo = Data / Tamanho = 10 / Formato = dd/mm/aaaa --> <DATA_MEDICAO_PREVISTA> </DATA_MEDICAO_PREVISTA> <!-- Data de medição do indicador realizada --> <!-- Tipo = Data / Tamanho = 10 / Formato = dd/mm/aaaa --> <DATA_MEDICAO_REALIZADA> </DATA_MEDICAO_REALIZADA> <!-- Quantidade do indicador prevista --> <!-- Tipo = ponto flutuante / Tamanho = 9 / Casas decimais = 3 --> <QTD_PREVISTA> </QTD_PREVISTA> <!-- Quantidade do indicador realizada --> <!-- Tipo = ponto flutuante / Tamanho = 9 / Casas decimais = 3 --> <QTD_REALIZADA> </QTD_REALIZADA> </INDICADOR_DESEMPENHO> </ABA_INDICADORES_DESEMPENHO> <ABA_USUARIOS> <!-- Dados da aba Usuário --> <USUARIO> <!-- Representa um Usuário do Plano Operacional --> <!-- Login do Usuário --> <!-- Tipo = String / Tamanho = 15 --> <LOGIN> </LOGIN> <!-- Indica se o usuário está ativo ou não --> <!-- Tipo = inteiro / Tamanho = 1 Valores possíveis: 1 - Ativo 0 - Inativo --> <ATIVO> </ATIVO> </USUARIO> </ABA_USUARIOS> </PLANO_OPERACIONAL></CONJUNTO_PLANO_OPERACIONAL>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem estes dois artigos aqui no imasters, talvez lhe ajude em algo:

http://www.imasters.com.br/artigo.php?cn=166&cc=86

http://www.imasters.com.br/artigo.php?cn=230&cc=86

 

li em um artigo num lembro onde que no sql server 2005 está muito mais preparado para xml, verifique se compensa fazer nele, importando seus dados do 2000 pro 2005.

 

 

falows

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Eriva. Eu já tinha visto os exemplos mas eles são muito "simples" para o que estou precisando. Quando a fazer o "serviço" no SQL Server 2005 é meio inviável. Acho que vou ter mesmo que tentar criar um Script ActiveX que utiliza o DOM. O problema é que eu não sou programador VB :D Essa Microsoft é fogo mesmo... Pra tudo que você quer ela te dá uma solução "Microsoft". Se você não programa em VB, C#, etc.. Se lascou...Abraços, Gilberto

tem estes dois artigos aqui no imasters, talvez lhe ajude em algo:http://www.imasters.com.br/artigo.php?cn=166&cc=86http://www.imasters.com.br/artigo.php?cn=230&cc=86li em um artigo num lembro onde que no sql server 2005 está muito mais preparado para xml, verifique se compensa fazer nele, importando seus dados do 2000 pro 2005.falowst+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.