O melhor... está sempre para vir!

O índice nonclustered tem sempre o índice clustered na sua definição.

Afinal o que compõe um índice clustered e nonclustered? Quantos de nós já viram uma tabela com um índice clustered na ColunaX e depois um índice nonclustered na ColunaY e na ColunaX? Quando eu vejo uma coisa destas costumo “disparar”:Eu: “Temos uma coluna duplicada neste nonclustered”Alguém : “Hã?”Eu: “Sabes que um nonclustered numa tabela tem sempre o clustered lá, não sabes?”Alguém : “Hã?” Tudo bem, vamos a...

Numa mensagem para debug, print e select retornam ROWCOUNT diferentes

Há uns dias coloquei aqui uma entrada onde pedia cuidado no código onde colocamos um ROWCOUNT. Surgiu uma questão que deixo aqui respondida. Parece básica… e é, mas o que é básico para alguns não é necessariamente para outros. Se não se lembram, colocar um print ou um select “para debug” pode (e altera) o nosso ROWCOUNT, bem como um begin/commit transaction. A única diferença entre apagarmos...

Mover o índice clustered para outro filegroup não move a tabela toda para esse filegroup

Esta é interessante e muitas vezes passa despercebida aos “DBA’s acidentais”. Quero mover uma tabela de um filegroup para outro. A tabela tem um índice clustered, logo se fizer drop ao índice e o refizer no novo filegroup a tabela é movida para lá. Ou, pelo menos, alguns esperam. E podem esperar, mas é um “Boby”. Um dia tenho de contar a hostória do “Boby”, o cão...

Deletes numa heap podem não reduzir nem o tamanho nem o número de reads

Esta é estranha… ou não. Só quem nunca passou por ela é que duvida. Eu já passei por ela. Estava a falar sobre isto com um colega que ainda não passou e que, naturalmente, duvidou. Nada como mostrar que é possível. Criamos uma tabela sem índice clustered, apenas um nonclustered. Heap mais simples não vão encontrar… Inserimos alguns valores. No meu caso, 24025 linhas. Vamos ver o...

Cuidados a ter com o uso de ROWCOUNT

Eu uso muitas vezes ROWCOUNT, normalmente para partir certas operações em batches. Exemplo clássico, um delete gigante que não queremos que encha o nosso transaction log. E sim, é mais usual do que pensamos. A questão deste post é que temos de ter muito cuidado como usamos esse rowcount, porque alguém pode mexer no nosso código mais tarde. A sério, não percebo porque é que alguém algum...

Vale a pena passar de SQL Server 2014 para SQL Server 2017?

Surgiu num cliente uma questão bem pertinente mas a que já vamos estando habituados. Será que vale a pena fazer upgrade de SQL Server 2014 Standard para SQL Server 2017 Standard? tl;dr Sim. Este cliente tem um misto de SGBD’s num misto de versões.A questão surgiu para um certo servidor que, estando agora em SQL Server 2014, poderia ser actualizado para SQL Server 2017. Duas vantagens que...

Mais cuidados a ter com select into para temporárias

Se bem se lembram, há uns dias fiz aqui um post a relembrar termos cuidado quando fazemos um select into para uma temporária. Este é outro caso em que as coisas podem não acabar como esperámos. Da última vez mostrei como num select into o coluna fica nullable se a tabela fonte tem a coluna nullable. Nesta demo mostro o contrário, como partimos de uma coluna que...

Num select into o campo é nullable se o campo da tabela original é nullable.

Passa muitas vezes despercebido aos mais incautos. Mesmo que tenhamos uma query em que explicitamente colocamos uma coluna not null, o select into vai deixar a definição da coluna nullable. Mas porque é que isso interessa? Interessa porque sabemos que é muito mais do que um preciosismo definirmos o nosso modelo de dados como deve de ser. Há muitas maneiras de o SQL Server melhorar um plano...

Será que quando se declara uma variável o SQL Server usa logo o espaço?

Eu sei que posso já ser considerado da “velha guarda”. Aprendi a programar com 11 anos, há mais anos do que muitos colegas meus têm de vida. Se calhar é por isso gosto de ver coisas feitas à moda antiga. Uma delas é ver todos os declare no topo do script. E de repente: Mas assim apenas declaro mais abaixo e só aí vou usar o espaço...

Cuidado com casts em campos char/nchar/varchar/nvarchar

Há erros que nunca cometemos. Por exemplo, um overflow num int que nos faz pensar por que raio é que a coluna não foi logo definida como bigint. Ou um destes casos que quero mostrar agora. Porque nunca acontecem. Sabemos que se tentarmos ultrapassar certos limites, o SQL Server nos avisa. Ou este Mas há outros… Vamos correr de novo para vermos os tamanhos reais em bytes...