Usando Merge

Essa instrução permite que façamos mescla de dados entre duas tabelas, utilizando os comandos DML (insert, update e delete) como ação caso uma condição seja verdadeira,ou falsa.

Além de tudo a instrução Merge possui uma sintaxe muito simples, veja abaixo:

  • Merge: indica a tabela de destino
  • Using: indica a tabela de origem
  • When not matched then: em português, “quando a condição não combinar” (não precisa explicar não é?)
  • When matched then: em português, “quando a condição combinar”

Há pouco tempo atrás construí uma solução em um projeto, onde os representantes diariamente sincronizavam dados de pedidos em uma tabela chamada sinc.pedido e uma rotina diária era executada para mesclar esses dados há uma tabela chamada adm.pedido. Abaixo seguem o ER das tabelas do cenário.

Utilizando o SQL Data Generator da Red Gate eu incluí 100000 registros na tabela de sincronização. Assim ao criarmos a rotina de mescla teremos uma idéia do desempenho.

Abaixo segue o código utilizado para fazer o Merge dos dados, esse script levou 2 segundos para rodar no meu notebook no ambiente de teste que eu criei já no ambiente de produção a mesma quantidade de dados demora menos de 1 segundo para executar.

Merge adm.pedido 
    Destino
Using sinc.pedido 
    Origem
On 
    origem.cdpedido = Destino.cdpedido
When Not Matched then
    Insert values (Origem.cdpedido, Origem.dtpedido, Origem.cdcliente, Origem.cdvendedor, Origem.dspedido)
When matched then    
    Update set Destino.cdpedido = Origem.cdpedido;    

Para concluir, em versões passadas do SQL Server poderíamos utilizar um cursor para fazer a comparação da tabela e tomar as ações, ou até mesmo uma tabela temporária enfim existem diversas formas criativas de contornar a situação, porém o Merge nos da um desempenho melhor na maior parte dos casos e é muito fácil de programar.

Abraço, Rodrigo

SQL Data Generator

Um dos grandes erros no desenvolvimento é não simular o ambiente do cliente. O caso mais comum é quanto à otimização das tabelas ou desempenho dos relatórios.

Para resolver esses problemas, é interessante fazermos uma carga de massa de dados nas tabelas mais críticas. Um dos grandes auxílios que temos para esse trabalho é utilizar um software chamado SQL Data Generator.

Esse software permite dar carga de dados através de uma fonte de dados externa ou através de seu gerador de registros. O gerador de registros trabalha de forma muito criativa dentro da regra da tabela, por exemplo, em um campo identity ele simplesmente ignora a importação, já se tivermos um campo de foto do cliente ele irá incluir fotos de pessoas. Além de tudo isso esse software ainda permite criarmos nossas regras utilizando expressões regulares.

Abaixo vou exemplificar como esse software pode ser utilizado. Para baixar a versão Trial do software basta acessar esse link

Como a maior parte dos softwares produzidos pela Red Gate, esse é integrado ao Management Studio e pode ser chamado através do menu Tools.

 

Ao chamar o SQL Data Generator a primeira tela apresentada é a do Project Configuration, onde vamos passar os dados de conexão (servidor, usuário, senha e banco de dados).

 

Após confirmar os dados de login o software fará a leitura do catálogo de objetos do database e irá listar as tabelas, disponibilizando assim, a opção de selecionar as que devem ser populadas.

No exemplo abaixo, vou selecionar apenas uma tabela de cargos dos colaboradores, onde há duas colunas o ID e o nome do cargo.

 

No painel a esquerda chamado Tables to populate, será listada todas as tabelas do database e ao expandir uma tabela a sua estrutura será exibida.

Já no painel a direita será dividido em duas partes uma chamada de Table generate settings e outra de Preview of data to be generated.

  • Table generate settings, permite informar quantos registros devem ser gerados, além de flegar se a tabela terá seus registros excluídos da origem. Há também a possibilidade de indicar outra fonte de dados para a carga.

Nesse exemplo vou deixar à configuração padrão a fonte dos dados será gerado através do algoritmo do software, serão gerados 1000 registros e a tabela terá seus registros excluídos.

  • Preview of data to be generated, exibe uma prévia dos dados que irá ser inserido na tabela, no meu exemplo a primeira coluna da minha tabela virá marcada com um ícone de um database isso é porque essa coluna é Identity, porém a segunda coluna terá alguns registros gerados de forma aleatória, isso porque ele assume uma expressão regular para gerar os dados. Para alterar basta clicar sobre a coluna e na guia superior modificar a lógica de geração dos dados. 

O SQL Data Generator possui um range de possibilidades com dados pré-definidos, por exemplo: nomes de pessoas (completo, primeiro nome, segundo nome), valores (money), enfim basta selecionar o combo Generator e escolher o tipo de registro.

Nesse exemplo, das possibilidades exibidas a que mais adere a minha tabela é o item Categori que fica dentro de Business.

Para fazer a “mágica acontecer” basta clicar em Generate Data e o software irá gerar os mil registros na tabela.

 

Para concluir, esse software economiza muito tempo de carga de dados para testes, principalmente no quesito de otimização de consultas. Imagine desenvolver um grande relatório de milhões de linhas e facilmente colocar os registros na sua tabela para teste.

Espero que tenham apreciado a dica, bons testes.

Abraço, Rodrigo

 

 

 

Silverlight 4 Release Candidate

 

Pessoal!

O Silverlight 4 Release Candidate já está disponível para download!

“What’s New in Silverlight 4?

Silverlight 4 delivers a full suite of powerful capabilities to business application developers, bringing the best-of-breed .NET platform to browser-based experiences. Silverlight provides an ideal platform for developing and deploying modern business applications for both customer facing and staff-facing applications. “

Encontre essas informações e downloads no Link http://silverlight.net/getstarted/silverlight-4/

Abraço, Rodrigo

1º DotNetDay

Dia 3/4/2010 irá acontece o maior evento de .NET do Brasil, o DotNetDay, são 12 horas gratuitas de palestras: quatro blocos de três webcasts com 50 minutos cada, apresentados por profissionais de nível excepcional e altamente conhecidos no mercado. O tema geral do evento é o lançamento do Visual Studio 2010 e do .NET framework 4.

 

Sinto-me honrado por ter sido convidado a falar sobre “ que há de novo no ASP.NET Web Forms 4”, vou estar palestrando ao lado de profissionais altamente reconhecidos, como próprio Agnaldo, Alexandre Lopes, Marcelo Sincic entre outros. Vale conferir a grade de palestras e a lista dos palestrantes do evento no site www.dotnetday.com.br

 

As inscrições podem ser feitas nos links abaixo:

Obs.: É importante se inscrever em cada parte do evento que há interesse, então para assistir a todas as palestras inscreva-se nos quatro links.

Abraço, Rodrigo

MCP Virtual Business Card

Pessoal,

Uma boa dica para quem é MCP e gostaria de possuir um cartão de visita bacana é utilizar o MCP Virtual Business Card, esse é um cartão virtual e com ele há uma página de perfil contendo as certificações e informações de contato.

Para acessar basta clicar no link e utilizar o seu Live Passport de MCP e personalizar o seu cartão de visitas.

As vantagens desse recurso são: é grátis, atualiza automaticamente pelo seu perfil de MCP e sem contar a  credibilidade de transmitir aos seus clientes e contatos as informações diretamente da Microsoft.

Espero que tenham gostado da dica.

Abraço, Rodrigo

Paginação de registros no SQL Server

Pessoal, a muito tempo eu venho sendo questionado sobre a mesma funcionalidade, como fazer uma query para criar a paginação dos dados igual ao recurso limit do MySQL – “No mysql temos o limit… blá, blá, blá”, sempre a mesma história.

 

Então, ai esta o código.

with ctLimit(
ordem, [client-IP], [client-hostname])
as (
select row_number()over(order by datetime asc) as Ordem ,
[client-IP]
, [client-hostname] from dbo.MsgTrackingLogs
)
select * from ctLimit where ordem between 10000 and 200000

E por falar nisso, fiz o teste desta query em uma tabela sem índices de 2313457 registros e para pegar uma faixa de 100 registros demorou menos de um segundo.

 

Por fim, me resta dizer que t-SQL possuí diversos recursos a serem explorados nas mais diversas situações do dia-a-dia. Em algumas aplicações pode-se analisar a implementação deste recurso para paginação diretamente o t-SQL ao invés de carregar um DataSet com milhões de linhas.

 

 

Abraço, Rodrigo.

Ps. Um abraço especial para um grande desenvolvedor, o meu amigo Pablo!

Object Browser

O Visual Studio é uma IDE completíssima, porém as vezes esquecemos de utilizar alguns recursos simples da própria IDE, como por exemplo o Object Browser. Recentemente eu auxiliei alguns profissionais a utilizar esse recurso.

 

 

O Object Browser é um recurso que exibe a estrutura de objetos, permitindo a navegação. Através dessa navegação é possível exibir as informações dos objetos relativos ao projeto, informações tais como: classes, overrides, interfaces, propriedades, métodos e etc.

Outra informação importante deste recurso é o nome físico do assembly (DLL) e inclusive o caminho físico da DLL.

 

 

 

 

Abaixo há um exemplo de informações; estou pesquisando dentro do System.Data a classe DataRow e dentro dela o método Delete().

 

Encerro esse post, reafirmando que este recurso é simples, o mesmo pode ser de muita utilidade no dia-a-dia, principalmente para quem chega de pára-quedas em projetos desenvolvidos por terceiros para dar manutenção.

 

Abraço, Rodrigo

 

Community Launch: Microsoft Community Day

Pessoal, olha um novo evento imperdível, irá acontecer dia 20 de março de 2010.

O evento é o Microsoft Community Day que irá abordar os assuntos:

1ª sessão (clique aqui para se inscrever):
– Introdução ao Azure Plataform (Evilázaro Alves)
– Windows 7 (Rodrigo Crespi)
– Forefront (Vinicius Apolinario)

2ª sessão (clique aqui para se inscrever):
– Sharepoint 2010 (Gilberto Uchoa)
– Exchange Server 2010 (Rodrigo Rodrigues e Anderson Patricio)

3ª sessão (clique aqui para se inscrever):
– Visual Studio 2010 (Agnaldo Diogo dos Santos)
– SQL Server 2008 R2 (Vitor Fava)
– Windows Server 2008 R2 (Alexandre Lopes)
– System Center: SCCM e SCOM (Marcelo Sincic)

Contamos com a presença de todos.

Abraços, Rodrigo