WHERE 1=1

 

Saudações caro leitor,

 

Atenção: O objetivo desse post não é discutir a utilidade inutilidade dessa ferramenta gambiara para montar queries dinamicamente.

 

Estava eu lendo uns artigos sobre SQL Server e me deparei com um post onde foi colocado a prova a eficiência do “WHERE 1=1”.

 

O autor fez uma comparação do resultado do plano de execução entre “WHERE 1=1” versus “WHERE SQRT(SQUARE(1 + 1)) * 3 = 6″ ou para quem não entendeu a brincadeira seria 6 = 6 usando funções do SQL Server.

 

E o resultado…. vocês podem ver abaixo. =\

 

 

E eu também cético não acreditei e fui rodar o SQL na minha própria máquina e o resultado é o mesmo… Se você não acredita como eu, rode e veja com seus próprios olhos. Rs

 

CREATE TABLE T (ID INT NOT NULL, TXT CHAR(32) NOT NULL)
 
;WITH CTE (ID) AS (
SELECT 1
UNION ALL
SELECT ID + 1 FROM CTE WHERE ID < 100000
)
 
INSERT INTO T
SELECT ID, REPLICATE('0', 32) FROM CTE
OPTION (MAXRECURSION 0)
 
UPDATE T SET ID = 1
UPDATE T SET ID = 1 WHERE 1 = 1
UPDATE T SET ID = 1 WHERE SQRT(SQUARE(1 + 1)) * 3 = 6

 

Loucura hein?! =\

 

Abraço e até a próxima.

 

Referências:
https://sqlfromhell.wordpress.com/2013/10/21/marcio-gomes-vs-sql-fight-2/

Tags: , ,

Como desabilitar o Auto Commit em SQL Server Management Studio

Saudações caro leitor,

 

Hoje vou falar de uma informação que pode ser trivial para alguns, irrelevantes para outro mas que em determinadas situações de pressão e temperatura pode ser um desespero para alguns.

 

Talvez vou saiba ou não, mas todos os scripts que executamos no gerenciador SQL Server Management Studio executam dentro de uma transação que tem um AUTO COMMIT, é isso mesmo ele “COMMITA” pra você automaticamente.

 

No dia à dia isso é quase irrelevante mas quando você precisa executar testes em que você deseja que a transação fique pendente, ou mesmo não quer correr o risco de cometer aquele deslize merda mexendo com um banco de dados que todo seu time usa.

 

Você pode ou deveria desabilitar o AUTO COMMIT, como fazer isso, simples…

 

Tools > Options > Query Execution > SQL Server > ANSI > MARCAR a opção SET IMPLICIT TRANSACTIONS

 

AutoCommit

 

Ai você se pergunta, mas e se eu esquecer de dar COMMIT ou ROLLBACK…

 

Quando você fechar a query vai aparecer a seguinte mensagem e basta você responder SIM (COMMIT) ou NÃO (ROLLBACK) e seja feliz.

 

AutoCommitClose

 

Abraço e até a próxima.

 

Referências:

Tags: , , , ,

SQL Server | Buscar por Tabela usada em Stored Procedures

Olá pessoal,

Recentemente precisei descobrir quais “stored procedures” utilizavam determinadas tabelas e eis que encontrei artigo que ensina de uma forma bem simples.

Seguem dois exemplos abaixo, um buscando apenas por stored procedures que utilizam a tabela de nome “Employee” e outro exemplo buscando pela tabela “Employee” e coluna “RateChangeDate”.

Exemplo buscando apenas pelo nome da tabela

USE AdventureWorks
GO
--Searching for Empoloyee table
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
GO

Exemplo buscando pelo nome da tabela e nome de coluna

--Searching for Empoloyee table and RateChangeDate column together
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%Employee%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%RateChangeDate%'
GO

Referências
http://blog.sqlauthority.com/2007/09/03/sql-server-2005-search-stored-procedure-code-search-stored-procedure-text/
http://blog.sqlauthority.com/2006/12/10/sql-server-find-stored-procedure-related-to-table-in-database-search-in-all-stored-procedure/
http://msdn.microsoft.com/pt-br/library/ms188737(v=sql.100).aspx

Tags: , , ,

Usando TortoiseSVN para exportar somente arquivos novos e modificados

Em alguns casos precisamos obter apenas os arquivos que foram adicionados ou modificados de um ramo do SubVersion.

Isso ocorre principalmente em empresas onde à equipe de desenvolvimento não é responsável pela publicação das modificações nos demais ambiente (homologação/produção).

Uma forma simples de obter esses arquivos para quem trabalha na plataforma Windows, é utilizando o TortoiseSVN(cliente para trabalhar com SubVersion).

Não vou entrar em detalhe de como funciona o TortoiseSVN pois já existe vasto material pela internet, basta você ir até o Google/Bing/DuckDuckGo e pesquisar…



Passo à Passo:

Passo 1:  Clique com o botão direito na pasta que você quer extrair os arquivos modificados/adicionados, selecione TortoiseSVN >> Exibir log.

SVN exportar arquivos modificados - Passo 1

Passo 2: Na lista de revisões selecione a primeira revisão que deu origem ao ramo, ou a primeira revisão onde você começou a realizar as modificações que deseja.
Observação: Nesse momento se você não faz uso, irá descobrir o quanto é importante comentar os commits.

Passo 3: Pressione e mantenha pressionado no teclado a tecla Control “Ctrl”, e selecione à última revisão que contêm suas modificações.

SVN exportar arquivos modificados - Passo 2

Passo 4: Clique com o botão direito do mouse em cima da primeira ou última revisão selecionada e depois clique em “Comparar revisões”.

SVN exportar arquivos modificados - Passo 3

Passo 5: À seguir será exibido uma lista com todos os arquivos modificados, inclusive excluídos, e pastas que tenham tido alguma propriedade alterada, por exemplo ignorar arquivos;

SVN exportar arquivos modificados - Passo 4

Passo 6: Para facilitar, clique na coluna Ação para ordenar a lista pelo tipo da modificação;

SVN exportar arquivos modificados - Passo 5

Passo 7: Selecione com a tecla Shift os arquivos adicionados/modificados;

SVN exportar arquivos modificados - Passo 6

Passo 8: Clique com o botão direito do mouse e depois na opção “Exportar seleção para…”;

SVN exportar arquivos modificados - Passo 7

Passo 9: Escolha a pasta de destino dos arquivos;

SVN exportar arquivos modificados - Passo 9

Passo 10: Espere terminar o processo de exportação e pronto !

SVN exportar arquivos modificados - Passo 10

Dúvidas ou sugestões, comentem.

Referências:
http://verysimple.com/2007/09/06/using-tortoisesvn-to-export-only-newmodified-files/

Tags: , , ,

JQuery UI Dialog | Removendo botão fechar [x] e alterando tooltip “close”

Hoje vou deixar três dicas aqui que consumiram algumas horas preciosas da minha vida e pode te poupar outras.

  • Remover o botão fechar do JQuery Dialog;
  • Alterar o texto do botão [x] do JQuery Dialog;
  • Alterar o tooltip do botão [x] do JQuery Dialog, que por padrão é “close”;

Remover o botão

$("#dialog-message").dialog({
    open: function(event, ui) {
        $(this).parents(".ui-dialog:first").find(".ui-dialog-titlebar-close").remove();
    }
});

Alterar o texto do botão [x]

$("#dialog-message").dialog({
    open: function(event, ui) {  
        $('.ui-dialog-titlebar-close').html('<span>Sair</span>');
    }
});

Ou ainda removendo o CSS

$("#dialog-message").dialog({
    open: function(event, ui) {  
        $('.ui-dialog-titlebar-close').removeClass("ui-dialog-titlebar-close").html('<span>Sair</span>');
    }
});

Alterar o tooltip do botão [x] do JQuery Dialog, que por padrão é “close”

Aqui existem duas formas, a mais simples e oficial

$("#dialog-message").dialog({	
    closeText : 'Clique aqui para sair'
});

E aqui uma solução alternativa que já tive que usar uma vez por causa de um IE que não estava aceitando a primeira solução

$("#dialog-message").dialog({
    open: function(event, ui) {  
        $('.ui-dialog-titlebar-close').attr("title", "Clique aqui para fechar");  
    }
});

Curiosidades

Caso você deseje conhecer o HTML que é gerado pelo JQuery Dialog, segue abaixo.

<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable">
   <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
      <span id="ui-dialog-title-dialog" class="ui-dialog-title">Dialog title</span>
      <a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a>
   </div>
   <div style="height: 200px; min-height: 109px; width: auto;" class="ui-dialog-content ui-widget-content" id="dialog">
      <p>Dialog content goes here.</p>
   </div>
</div>

Referências

Tags: , ,

Visual Studio | Como escolher o navegador para executar uma aplicação web

Pessoal,

Depois de um tempo sofrendo com soluções complexas ou manuais para escolher qual navegador executar uma aplicação web (website ou web application) surgiu um plugin que resolver esse problema.

Basta instalar o plugin de preferência através do NuGet.

 

Passos pelo NuGet:

  1. Abrir o NuGet (espero que você já saiba como fazer isso, pois deveria…);
  2. Digitar WoVS que ele já irá aparecer destacado, depois de instalar só irá faltar um passo;
  3. Clicar com o botão direito em cima da barra de menu e adicionar “Default Browser Switcher”, conforme a imagem abaixo.

 

 

Ahh não custa lembrar ele irá listar os navegadores que você tem instalado no seu computador.

 

WoVS Default Browser Switcher
http://visualstudiogallery.msdn.microsoft.com/bb424812-f742-41ef-974a-cdac607df921/

Enjoy it !

Problema ao atualizar o NuGet 1.8 no Visual Studio 2010

Ao tentar atualizar a última versão do NuGet 1.8 no Visual Studio 2010, eu tomei a seguinte mensagem de erro.

Erro na atualização do NuGet

Bem isso é devido a um bug conhecido nas assinaturas de extensões no Visual Studio 2010.

Resolver isso é bem simples, basta baixar essa correção, instalar e pronto pode atualizar o NuGet normalmente como sempre foi.

HotFix
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=38654

NuGet
http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c?SRC=VSIDE 

Referências
http://support.microsoft.com/kb/2581019
http://docs.nuget.org/docs/reference/known-issues
 

 

 

 

Unrecognized attribute ‘targetFramework’

Se você chegou até aqui por causa do erro “Unrecognized attribute ‘targetFramework'”, isso significa que você não configurou seu website ou diretório virtual para o Application Pool do ASP.NET 4.0, ou você não tem o ASP.NET 4.0 FrameWork instalado.

Erro de configuração do diretório virtual

Primeiro vá até o Windows Explorer e no caminho “C:\Windows\Microsoft.NET\Framework\” e verifique se você tem o FrameWork 4.0 instalado.

Caso você não tenha instalado a versão 4.0, antes de continuar faça o download e instalação do mesmo.

Microsoft .NET Framework 4 (Web Installer)
http://www.microsoft.com/en-us/download/details.aspx?id=17851

Microsoft .NET Framework 4 (Standalone Installer)
http://www.microsoft.com/en-us/download/details.aspx?id=17718

Se você tiver IIS instalado vá até o IIS do seu website ou diretório virtual para alterar à versão como na imagem abaixo.

Propriedades do Diretório Virtual

Referências: http://www.roelvanlisdonk.nl/?p=1772

Enjoy it!
Leandro Ribeiro

App_Data ASPNETDB.MDF – Deployment

Recentemente encontrei algumas dificuldades para publicar uma aplicação ASP.NET MVC em um servidor zerado ou praticamente.

Elo só tinha IIS7.5 com ASP.NET 3.5, então restou para mim instalar o ASP.NET 4.0, o SQL Server Express e depois publicar a aplicação.

O maior problema foi com a geração o deploy do aspnetdb.mdf que é o arquivo de banco de dados que contêm a estrutura e dados para o funcionamento do MemberShip que já vem configurado e pronto para uso com o template de aplicação ASP.NET MVC.

 

Caso você tenha problemas com a “geração” do banco de dados na pasta App_Data ele pode ser causado por um dos motivos abaixo.

  • O servidor de banco de dados não está instalado (SQL Server/ SQL Server Express 2005/2008/2008 R2);
  • Você ainda não rodou o comando aspnet_regsql.exe para gerar o banco de dados padrão do ASP.NET no seu servidor de banco de dados;
  • Seu banco de dados pode não está rodando, são dois serviços que devem estar rodando, a instância do banco e o SQL Browser;
  • O datasource da sua string de conexão pode estar errada, errada entenda o nome da instancia está diferente do nome da instancia configurado na máquina onde você está fazendo o deploy;

 

Uma coisa interessante é que nesse último caso, apesar de meu “SQL Server Configuration Manager” dizer que o nome da instância era MSSQLSever que foi o nome que eu havia atribuido na instalação o nome era outro. Hahahaha

Como eu descobri isso ? Depois de sofrer horas sem fim..

Eu habilitei o servidor para aceitar conexões remotas que você pode ver como no link abaixo como fazer, após eu realizei a conexão através do SQL Server Management Studio informando o IP da máquina servidora do banco de dados.

 

Após cliquei com o botão direito em cima do IP que simbolizava a conexão e pedi as propriedades, e para minha supresa só estava o nome da máquina XPTO, e não havia nenhuma menção ao nome da instância.

Então alterei a string de conexão para ficar assim..

<add name=”ApplicationServices” connectionString=”data source=XPTO;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true” providerName=”System.Data.SqlClient” />

Onde XPTO é o nome da máquina onde está instalado o servidor de banco de dados.

 

Habilitando conexões remotas.
http://blogs.msdn.com/b/walzenbach/archive/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008.aspx

Creating the Application Services Database for SQL Server
http://msdn.microsoft.com/en-us/library/x28wfk74.aspx

 

Enjoy it !

Leandro Ribeiro

Tags: , , , , , ,

Microsoft TechEd 2011 Decepção e aprendizado

Introdução

Esse é um post de desabafo a respeito da TechEd 2011, então se você está pensando outra coisa sobre esse post não leia até o final.

Esse ano após algumas tentativas sem sucesso, consegui ir ao TechEd, como toda primeira vez fui cheio de expectativas e ansiedade, mas o que pude constatar vou resumir abaixo e aqui nesse parágrafo, decepção mais você tem que experimentar uma vez pra saber.

InfraEstrutura

O evento esse ano foi no Expo Center Norte em São Paulo, para te situar próximo ao shopping que dizem que vai explodir (eu jantei lá e tudo). O local escolhido apesar de longe do centro de cidade, tem uma boa infraestrutura, escadas rolantes, bastantes salas, salão para convenção e etc.

Conteúdo

Mas vou focar no que interessa, conhecimento, nesse ponto decepção total, a maioria das palestras que pude comparecer ora eram confusas, ora eram mais blá blá do que código, sem falar nas inúmeras tentativas de te converter ao IE9 (grande parte das palestrar que assisti eram para desenvolvimento Web).

Os palestrantes pareciam perdidos, e ora aconteciam inúmeros erros durante a apresentação, erros acontecem mais eu fico pensando eles não tiverem tempo para ensaiar ? preparar uma máquina virtual pronta para apresentar ? bem se me convidasse para palestrar em um evento desse porte eu iria ensaiar e preparar uma máquina virtual para não ter problemas.

Outra coisa importante, grande parte senão 90% dos palestrantes não eram da Microsoft, assim ficou me parecendo um certo desprestígio da equipe de desenvolvimento da Microsoft, pra um evento que tem a divulgação e preço que tem, acho que valeria a pena trazer gente da própria Microsoft.

O que pude perceber é o que o foco do evento era vender, vender e vender, aí você me vender o que ? Windows Phone e XBOX, ou em outras palavras vender a idéia de como a Microsoft está voltando seus esforços para você desenvolver para eles.

Não vou nem dedicar muito das minhas palavras, mas ver algumas palestrar onde se tentava de toda forma me convencer que o IE9 é o melhor navegador do mundo foi quase cômico.

Conclusão

Enfim se você espera ir a TechEd e aprender um monte de coisas legais que você poderá aplicar no seu dia à dia ? Esqueça, se você pensa em aprender várias coisas que vai poder usar um dia ? Talvez você saia só um pouco satisfeito, se você quer ir lá pra trocar cartão de visitas com outros profissionais talvez você consiga.

Obs.: Uma menção a cúmulo da econômia de não deixar garrafas de café espalhadas, serão que ninguém percebeu que a galera de TI é movida a café ? E sem falar em um evento que começa as 8 da manhã ?

Enfim decepção a aprendizado de talvez não ir nos próximos anos em um evento assim…

Tags: , , , ,