Esse post nao sera mais atualizado nesse blog. Para visualizar esse post em seu novo endereco, acesse:http://milaneze.com.br/post/2011/10/09/SELECT-Ordem-Logica-de-Processamento.aspxA ordem de execucao de um SELECT e:1. FROM2. ON3. JOIN4. WHERE5. GROUP BY6. WITH CUBE or WITH ROLLUP7. HAVING8. SELECT10. DISTINCT11. ORDER BY12. TOP Esse post nao sera mais atualizado nesse blog. Para visualizar esse post em seu novo endereco, acesse:http://milaneze.com.br/post/2011/09/23/SQL-Server-Removendo-a-hora-de-um-DATETIME.aspxExistem varias formas de remover a hora de um valor DATETIME, porem qual e a melhor delas? Existe uma resposta bem completa nessa pagina do Stack Overflow: http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion-of-a-datetime-value-sql-serverResumindo, no SQL Server 2008, a melhor forma seria:DECLARE @DATA AS DATETIMESET @DATA = CONVERT(DATE, GETDATE())Porem, nas outras versoes nao existe o tipo DATE. Entao, na ordem do mais rapido para o mais demorado, ficaria:DECLARE @DATA AS DATETIME-- mais rapidoSET @DATA = CAST(GETDATE() - 0.50000004 AS int)-- segundo mais rapido e mais facil de entender e lembrarSET @DATA = DATEDIFF(DAY, 0, GETDATE())-- terceiro mais rapidoSET @DATA = FLOOR(CAST(GETDATE() as float))Conclusao: o melhor de se usar, por nao ter muita diferenca do primeiro e nao confundir tanto, seria a segunda opcao. Esse blog nao sera mais atualizado nesse endereco. A partir de hoje ele estara disponivel no endereco www.milaneze.com.br.Os mesmos posts continuam no novo endereco. Esse post nao sera mais atualizado nesse blog. Para visualizar esse post em seu novo endereco, acesse:http://milaneze.com.br/post/2011/09/23/SQL-Server-ISNUMERIC-retorna-falso-positivos.aspxA funcao ISNUMERIC retorna alguns falsos positivos em determinadas situacoes. Alguns dos casos sao: para sinais de "$" (cifrao), "-" (menos), espaco e tab.Uma maneira de evitar isso e adicionar "e0" ao final do dado que sera testado. Isso fara o numero ficar num formato cientifico, o que na pratica multiplica o numero por 1. Caso seja algum dos sinais citados acima, a funcao ISNUMERIC ira retornar 0, pois nao e um numero (por exemplo: "$e0").Caso o numero a ser testado ja esteja num formato cientifico, ISNUMERIC retornara 0, pois, por exemplo "1.234e4e0" nao e um valor numerico valido. Para lidar com isso, antes de adicionar "e0" ao numero a ser testado, pode ser interessante testar antes para ver se o numero contem a letra "E" nele. Caso contenha, basta colocar esse valor na funcao ISNUMERIC para fazer o teste. Caso contrario, entao devera ser adicionado "e0" apos o valor. Esse post nao sera mais atualizado nesse blog. Para visualizar esse post em seu novo endereco, acesse:http://milaneze.com.br/post/2012/05/19/ASPNET-TreeView-Recursivo.aspxNo ultimo post eu falei sobre a criacao de um menu recursivo (apesar de ser gerada uma lista sem CSS). Tambem disponibilizei um arquivo com a query para criacao das tabelas e dados de exemplo.Nessa semana, meu amigo Rafael (vulgo Boca) preciso de uma ajuda com algo parecido, porem, ao inves de montar um XML (que era o caso do exemplo do post anterior), ele precisava montar um TreeView. Os dados na tabela do problema dele tem uma estrutura muito parecida com a que montei no post anterior: cada registro referencia seu registro pai na mesma tabela.Pesquisando, encontrei um exemplo no stackoverflow, que faz exatamente o que ele precisa. Adaptei o exemplo com a query necessaria e o mesmo pode ser baixado pela seguinte URL:http://dl.dropbox.com/u/20361010/TreeViewRecursivo.rar Esse post nao sera mais atualizado nesse