Gerando retorno XML com Visual Studio 2010

Pessoal,

Alguns leitores me enviaram e-mails solicitando ajuda para colocar o código do post Gerando arquivos XML com SQL Server em um aplicativo .NET e como sempre eu faço o possível para ajudar, abaixo esta o código em VB.NET.

Para criar esse código eu utilizei o Visual Studio 2010 e criei um Console Application. Para quem quiser fazer o download da versão beta é só clicar aqui, porém esse código irá rodar sem problemas no Visual Studio 2008.

Imports System.Data.SqlClient
Imports System.Xml
Module Module1

  Sub Main()
   
Dim lSQL As String = “select * from HumanResources.Department for xml auto”
   
Dim lConexao As String = “Data Source =(local); integrated security=SSPI; Initial Catalog=Adventureworks;”
   
Dim lCon As New SqlClient.SqlConnection(lConexao)
   
Dim lCmd As New SqlCommand(lSQL, lCon)
    lCon.Open()
   
Dim lrXml As XmlReader = lCmd.ExecuteXmlReader()
   
Console.WriteLine(“<?xml version=1.0 encoding=ISO-8859-1?>”)
   
Console.WriteLine(“<Departament>”)
   
While (lrXml.Read())
     
Console.WriteLine(lrXml.ReadOuterXml())
   
End While
   
Console.WriteLine(“</Departament>”)
    lrXml.Close()
 
End Sub

End Module

 

Pessoal, não preciso nem concluir não é? Muito fácil, mas se houver alguma dúvida é só pedir.

Abraço, Rodrigo

Download disponível – Webcast 30 scripts que não podem faltar no pendrive de um DBA! Parte 2

Pessoal,

Ontem (20/02/2010) aconteceu o tão esperado webcast dos 30 scripts que não podem faltar no pendrive de um DBA! Parte 2. Esse webcast foi apresentado por mim, Alexandre Lopes e Vitor Fava. E já estão disponíveis para download a apresentação e os scripts.

Então não esqueçam de rechear os seus pendrives com esses novos scripts.

Abraço, Rodrigo

Gerando arquivos XML com SQL Server

A partir do SQL Server 2000 é possível extrair de um banco de dados, de maneira direta, dados no formato XML.  Esta funcionalidade é de grande ajuda quando falamos de integrações com diversos sistemas, ou extrações de dados para relatórios, dispositivos móveis, arquivos portáveis e etc.

Para gerar um arquivo XML utilizamos a instrução FOR XML, que pode vir acompanhada das opções: RAW, AUTO e EXPLICIT.

Por exemplo, a instrução abaixo:

SELECT cdcliente, nmcliente

      FROM dbo.cliente FOR XML raw

Essa instrução nos retornará o seguinte XML:

<row cdcliente=“1” nmcliente=“SQL Server Day”/>

<row cdcliente=“2” nmcliente=“DotNetDay”/>

<row cdcliente=“3” nmcliente=“SQL Saturday Night”/>

<row cdcliente=“4” nmcliente=“Cliente A”/>

<row cdcliente=“5” nmcliente=“Cliente B”/>

<row cdcliente=“6” nmcliente=“Cliente C”/>

<row cdcliente=“7” nmcliente=“Cliente D”/>

A instrução FOR XML com a opção RAW cria o elemento ROW e cada campo é transformado em atributo desse elemento.

A instrução FOR XML com a opção AUTO utiliza o nome da tabela como delimitador de elementos, essa opção pode vir acompanhada do argumento opcional ELEMENT acompanhe o código a seguir:

SELECT cdcliente, nmcliente

      FROM dbo.cliente FOR XML AUTO, ELEMENTS

Este código irá gerar o retorno abaixo:

<dbo.cliente>
    <cdcliente>1</cdcliente>
    <nmcliente>SQL Server Day</nmcliente>
</dbo.cliente>
<dbo.cliente>
    <cdcliente>2</cdcliente>
    <nmcliente>DotNetDay</nmcliente>
</dbo.cliente>
    <dbo.cliente><cdcliente>3</cdcliente>
    <nmcliente>SQL Saturday Night</nmcliente>
</dbo.cliente>
<dbo.cliente>
    <cdcliente>4</cdcliente>
    <nmcliente>Cliente A</nmcliente>
</dbo.cliente>
<dbo.cliente>
    <cdcliente>5</cdcliente>
    <nmcliente>Cliente B</nmcliente>
</dbo.cliente>
<dbo.cliente>
    <cdcliente>6</cdcliente>
    <nmcliente>Cliente C</nmcliente>
</dbo.cliente>
<dbo.cliente>
    <cdcliente>7</cdcliente>
    <nmcliente>Cliente D</nmcliente>
</dbo.cliente>

É importante lembrar que o arquivo XML deve ser composto de u elemento Raíz, veja o retorno à cima com o elemento Raíz:

<Cliente>    
    <dbo.cliente>
        <cdcliente>1</cdcliente>
        <nmcliente>SQL Server Day</nmcliente>
    </dbo.cliente>
    <dbo.cliente>
        <cdcliente>2</cdcliente>
        <nmcliente>DotNetDay</nmcliente>
    </dbo.cliente>
        <dbo.cliente><cdcliente>3</cdcliente>
        <nmcliente>SQL Saturday Night</nmcliente>
    </dbo.cliente>
    <dbo.cliente>
        <cdcliente>4</cdcliente>
        <nmcliente>Cliente A</nmcliente>
    </dbo.cliente>
    <dbo.cliente>
        <cdcliente>5</cdcliente>
        <nmcliente>Cliente B</nmcliente>
    </dbo.cliente>
    <dbo.cliente>
        <cdcliente>6</cdcliente>
        <nmcliente>Cliente C</nmcliente>
    </dbo.cliente>
    <dbo.cliente>
        <cdcliente>7</cdcliente>
        <nmcliente>Cliente D</nmcliente>
    </dbo.cliente>
</Cliente>

É muito simples fazer extração para XML desta forma. Aguardo comentários, dúvidas ou sugestões.

Abraços, Rodrigo

Paper-clip

No final de 2009 eu comecei a editar esse blog com o BlogEngine.Net e como é comum depois do BlogEngine.Net instalado comecei a procurar um tema para ele, até desenvolvi um, mas como o paper-clip não há igual.

Foi ai que eu encontrei no blog do Caio Proiete o tema adaptado por ele pronto para uso, conversei com o Caio e lógico o tema é free, porém estão os créditos no rodapé do blog.

Para fazer o download dos temas veja o post do Caio Proiete no link: http://www.caioproiete.com/blogs/pontonet/post/2008/02/Tema-Paperclip-para-BlogEngineNET.aspx

 

Abraço, Rodrigo

30 Scripts que não podem faltar no pendrive de um DBA! Parte 2

Pessoal, acontecerá o segundo webcast com os 30 scripts que não podem faltar no seu pendrive!

Serão apresentados scripts para segurança, performance, manipulação de databases e tabelas, etc… Os scripts foram desenvolvidos em Transact-SQL e Powershell.

Os palestrantes serão: Rodrigo Crespi (Eu), Vitor Fava e Alexandre Lopes.

Não deixe participar, o evento acontecerá dia 20/02/2010 as 17:45.

Para fazer a inscrição acesse o link abaixo:

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032442523&EventCategory=4&culture=en-US&CountryCode=US

Abraço, Rodrigo

Utilizando o Rank() e o Dense_Rank()

A função Rank permite que façamos a avaliação de ranking sobre um resultado de uma query.

Por exemplo, criei uma estrutura em uma tabela que possui os campos: cdcliente, nmcliente e nrnota onde nrnota é um valor atribuído ao cliente que vai de 1 à 10, esse valor é atribuído através do ERP que classifica baseado em diversas métricas.

Se eu quiser consultar os meus clientes montando um rank do cliente com melhor pontuação para o cliente com a pontuação mais baixa eu posso utilizar uma query com order by veja o exemplo:

SELECT nmcliente, nrnota FROM cliente ORDER BY nrnota desc

É fácil perceber que os três primeiros registros estão entre os clientes com melhor pontuação, porém, se quisermos que esse resultado possua uma coluna indicando qual a posição do meu cliente no ranking, igual ao ranking de vencedores de uma competição de natação onde eu tenho o primeiro lugar, segundo e terceiro.

SELECT nmcliente, nrnota, RANK() OVER(order BY nrnota desc) FROM Cliente ORDER BY nrnota desc 

Analise o resultado abaixo.

 

Na terceira coluna, utilizando a função rank eu criei a exibição do ranking dos meus clientes ordenados pelo cliente de maior pontuação para o cliente de menor.

Na próxima query eu vou retornar o top 3 dos meus clientes.

WITH RankCliente AS (
SELECT nmcliente, nrnota, RANK() OVER(order BY nrnota desc) AS ranking FROM Cliente)
SELECT * FROM RankCliente WHERE ranking <= 3 

Agora para dificultar um leitor do meu blog me enviou uma pergunta, como fazer ranking, porém o retorno ser em seqüência? A resposta é com o Dense_Rank veja o exemplo.

WITH RankCliente AS (
SELECT nmcliente, nrnota, 
    DENSE_RANK() OVER(order BY nrnota desc) AS ranking FROM Cliente)
SELECT * FROM RankCliente WHERE ranking <= 3

É fácil notar que o resultado da query a cima tem o mesmo filtro da enterior é o meu Top 3 de clientes, entretanto o retorno são 4 registros indicando os meus 4 clientes com melhor avaliação.

Pessoal era isso que eu tinha para falar sobre o Rank e o Dense_Rank, se ficaram algumas ou sugestões deixem seus comentários, ou enviem e-mails.

Abraço, Rodrigo.

SQL Search

 

Voltando de férias fiquei feliz em receber um e-mail da equipe da Red Gate avisando da liberação da primeira versão do SQL Search, falei deste plug-in no post do dia 07 de janeiro http://www.blog.crespidb.com.br/blogcrespi/post/2010/01/07/SQL-Search.aspx.

A nova versão superou minhas espectativas, realizei os mesmos testes que na versão beta e a performance esta melhor além da disposição do retorno que ficou mais clean.

O link para o produto é http://www.red-gate.com/products/SQL_search/index.htm, não deixem de baixar e utilizar esse plug-in.

Abraço, Rodrigo.

Microsoft Technology Saturday Night

Pessoal, não percam esse evento, vai acontecer dia 20/03/2010 as 18:30.

Clique aqui para fazer a inscrição, abaixo segue a descrição do evento.

 

Windows Server 2008 R2: Visão Geral

Será apresentado uma visão sobre o Windows Server 2008 R2 com as novas funções disponíveis nesta edição.

Palestrante: Alexandre Lopes, Consultor Senior especialista na plataforma SQL Server, atua na área de projetos, consultoria e treinamento. Profissional certificado Microsoft (MCT, MCITP, MCTS, MCSE, MCDBA), instrutor de cursos oficiais Microsoft desde 1999 e palestrante em eventos presenciais e à distancia (webcasts) para o Technet Brasil e MSDN Brasil.

SQL Server 2008 R2: Visão Geral

Nesta apresentação será apresentado o SQL Server 2008 R2 e uma visão geral sobre as novidades deste novo release do SQL Server 2008.

Palestrante: Vitor Fava, DBA com grande experiência nas áreas de Banco de Dados e Tecnologia da Informação, atuando no desenvolvimento, implementação, manutenção e suporte de servidores de bancos de dados corporativas de grande porte. Possui as certificações MCP, MCTS, MCITP e MCT em SQL Server 2000/2005/2008. Possue boa vivência em atividades de desenvolvimento e administração de ambientes empresarias utilizando SQL SERVER.

Visual Studio 2010 : Visão Geral

Nesta apresentação será apresentado uma visão geral sobre o Visual Studio 2010 e suas novas funcionalidades.

Palestrante: Agnaldo Diogo dos Santos, Possui mais de 25 anos de experiência na área, tendo sido aprovado em 26 provas (Microsoft e Sun), recebendo as credenciais MCT, 5 MCTS, 4 MCITP, MCPD, MCSE, MCDBA, MCSD, MCP e SCJP. Formado em Tecnologia em Processamento de Dados pela Fatec, foi desenvolvedor, analista e gerente de projetos. Como consultor prestou serviços a empresas como Banco1.Net, Unibanco, AmBev, AMPM Ipiranga e outros.

Abraço, Rodrigo.