Browsed by
Autor: José Diz

Otimização de funções de janela

Otimização de funções de janela

A partir do SQL Server 2012 novas funções de janela foram implementadas, várias delas permitindo construir códigos SQL mais eficientes. Mas mesmo assim é necessário ficar atento a como otimizar o processamento das funções de janela e este artigo detalha algumas técnicas. 1. Introdução Em outros artigos publicados no Porto SQL foi mencionado como otimizar … Continue Lendo “Otimização de funções de janela”

Índice de cobertura

Índice de cobertura

Em vários artigos na web e na documentação do SQL Server são fornecidas dicas de como criar índices para atender às junções definidas na cláusula FROM/ON ou ainda aos predicados da cláusula WHERE. Mas o que nem sempre esses textos explicam é sobre os critérios que o otimizador de consultas (query optimizer, vide artigo O … Continue Lendo “Índice de cobertura”

Migração de banco de dados para versão anterior do SQL Server

Migração de banco de dados para versão anterior do SQL Server

Você já se deparou com a mensagem de erro abaixo, Msg 948 The database ‘BD’ cannot be opened because it is version 904. This server supports version 852 and earlier. quando tentou restaurar um banco de dados utilizado anteriormente em outra instância? 1. Introdução 1.1. A mensagem de erro Às vezes é necessário migrar um … Continue Lendo “Migração de banco de dados para versão anterior do SQL Server”

“SQL Server 2017 Query Performance Tuning” – impressões iniciais

“SQL Server 2017 Query Performance Tuning” – impressões iniciais

Sempre fui rato de biblioteca, habituado a ler manuais para conhecer os recursos do produto ou serviço. Além dos manuais de referência técnica, costumo estudar assuntos técnicos em livros (impressos ou e-book). Aprendi a programar em T-SQL em livros de Itzik Ben-Gan, inclusive testando os exemplos dos livros à medida que os lia. Teoria e … Continue Lendo ““SQL Server 2017 Query Performance Tuning” – impressões iniciais”

Qual é mais rápido: NOT IN ou NOT EXISTS?

Qual é mais rápido: NOT IN ou NOT EXISTS?

Qual a melhor forma de obter relação dos produtos que não foram vendidos nos últimos 7 dias, de modo a avaliar estratégias de promoção desses produtos? Ou seja, como saber quais elementos estão no conjunto A mas não estão no conjunto B. 1. Introdução Bancos de dados relacionais estão baseados na teoria dos conjuntos e … Continue Lendo “Qual é mais rápido: NOT IN ou NOT EXISTS?”

Conversão de cursor para conjunto de linhas

Conversão de cursor para conjunto de linhas

Sua consulta está lenta como uma lesma? Por acaso tem cursor no código T-SQL dela? Então este artigo é o que você esperava. Ou não…  1. Introdução Em 2017 comecei a escrever artigo com o título “Quando cursor é a melhor opção”, mas nunca dei prosseguimento ao artigo. Consultando há pouco o esboço, foram escritas … Continue Lendo “Conversão de cursor para conjunto de linhas”

Calcular tempo decorrido entre duas datas

Calcular tempo decorrido entre duas datas

Como calcular a idade de uma pessoa em anos, meses e dias e utilizando T-SQL? Se pesquisar na web, encontrará vários métodos “mágicos” mas que falham em algum momento. E quantos dias úteis já se passaram desde que aquela fatura venceu? Ou ainda quantas horas úteis foram dedicadas pelo colaborador a um projeto, ao longo … Continue Lendo “Calcular tempo decorrido entre duas datas”

Como melhorar a performance ao ajustar o nível de compatibilidade do banco de dados

Como melhorar a performance ao ajustar o nível de compatibilidade do banco de dados

– “O servidor novo é muito mais potente do que o antigo mas o banco de dados está mais lento!”, reclama fulano. – “Você alterou o nível de compatibilidade?”, pergunta cicrano. Você já presenciou esse diálogo alguma vez, principalmente após uma migração de versão antiga para versão mais recente do SQL Server? Versão do mecanismo … Continue Lendo “Como melhorar a performance ao ajustar o nível de compatibilidade do banco de dados”

Concatenação de cadeias de caracteres (strings concat)

Concatenação de cadeias de caracteres (strings concat)

Uma operação frequente é a de unir várias cadeias de caracteres (strings) em um único texto. Por exemplo, considerando-se que a informação de endereço está armazenada nas seguintes partes e que é necessário exibir o endereço completo como um único texto Rua Santana do Paraíba, 820 (Centro) temos que essa ação se realiza através da … Continue Lendo “Concatenação de cadeias de caracteres (strings concat)”

Qual é mais rápido: CASE, CHOOSE ou IIF?

Qual é mais rápido: CASE, CHOOSE ou IIF?

E novamente mais um artigo da série “Qual é mais rápido”, com tira-teima entre diferentes casos do SQL Server. Às vezes me deparo com respostas de tópicos de fóruns em que determinado usuário cita que IIF() é ruim e sugerindo que se deve utilizar o CASE no lugar de IIF(). É assim mesmo? 😕 As … Continue Lendo “Qual é mais rápido: CASE, CHOOSE ou IIF?”

Como datas & horas são armazenadas no SQL Server?

Como datas & horas são armazenadas no SQL Server?

Com elevada frequência tenho visto dúvidas sobre como o SQL Server armazena colunas com tipo de dados que contenha data e/ou hora. Recentemente li em tópico de fórum alguém mencionando que a data é armazenada de acordo com o idioma do sistema operacional. 😮 Se (não) é assim, então como são armazenados data & horário … Continue Lendo “Como datas & horas são armazenadas no SQL Server?”

Novo tipo de dados para data & horário

Novo tipo de dados para data & horário

Como você decide a forma de armazenar data no banco de dados: smalldatetime, datetime ou char(8)? E o horário? Seja como for, a Microsoft lançou novos tipos de dados para armazenamento de data e hora. Afinal, Pois é… 1. Introdução Para armazenar data e horário até a versão 2005 do SQL Server somente existiam os … Continue Lendo “Novo tipo de dados para data & horário”

Paginação de resultado de consulta SQL

Paginação de resultado de consulta SQL

Páginação é uma técnica que permite exibir o resultado de consultas SQL em partes, evitando inclusive sobrecarregar a aplicação (principalmente quando rodando em dispositivo móvel). 1. Introdução Recentemente publiquei o artigo “Novos recursos de programação para SQL Server” em que foram relacionados novos recursos de programação T-SQL, desde a versão 2012 até a versão 2019. … Continue Lendo “Paginação de resultado de consulta SQL”

Utilizar 23:59:59.997 é uma prática ruim?

Utilizar 23:59:59.997 é uma prática ruim?

Em fórum de SQL Server o autor do tópico Update em Campo DATETIME questiona “Poderiam me dizer/explicar porque no SQL não está aceitando fazer um update de um campo datetime para ‘2019-01-01 23:59:59:999’”? Como resposta, foi postada a seguinte informação Na documentação do tipo de dados datetime consta que o horário pode ir das 00:00:00 … Continue Lendo “Utilizar 23:59:59.997 é uma prática ruim?”

“T-SQL Window Functions: For data analysis and beyond” – impressões iniciais

“T-SQL Window Functions: For data analysis and beyond” – impressões iniciais

Ele chegou um dia antes da data prevista. Achei-o magro, comparado com os anteriores. Mas chegou. Foi encomendado ano passado, ainda na vigência da Black Friday de 2019. Às vezes encomendo livros em livrarias do exterior quando compensa pagar o frete do exterior para o Brasil do que comprar no País. Mas como na época … Continue Lendo ““T-SQL Window Functions: For data analysis and beyond” – impressões iniciais”