You are currently browsing the tag archive for the ‘T-SQL’ tag.


Desculpem ter deixado o titulo em maiúsculo, se desse ainda faria em NEGRITO.

Na empresa que trabalho sou responsável por entrevistar os candidatos.  E 9 a cada 10 DBAs me falam que TRUNCATE TABLE não gera log, que não dá para fazer ROLLBACK

Mas é CLARO que o SQL salva log, e se der algum problema e você usou BEGIN TRAN ele vai voltar. o TRUNCATE não armazena tanta informação como um DELETE, mas ele armazena quais paginas estão sendo desalocadas

Exemplo abaixo

Continue lendo »

Anúncios

Hoje fiz um tunning legal e gostaria de compartilhar com vocês.

Para preencher uma dimensão data, acredito que não existe muito segredo, basta fazer um loop pelas datas e inserir na tabela, mas e se você precise inserir em nível de minuto ou até segundo, pode acabar ficando lento pela inserção linha a linha

Segue abaixo exemplo original e versão tunnada

Continue lendo »


Olá pessoal, recentemente expliquei este problema para uma outra pessoa e imaginei que fosse interessante para mais alguém

Vamos fazer alguns exercícios.

Continue lendo »


Segue abaixo um problema que não tinha passado no SQL 2008 mais que muitos podem vir a passar:

Em muitos sistemas que já vi as somas ou subtrações são feitas como este exemplo abaixo:

DECLARE @DATE as DATETIME = GETDATE()

SELECT @DATE - 1
-----------------------
2011-09-21 14:28:33.910

 

Porém no SQL2008 com os novos tipos de datas isso não funciona mais

DECLARE @DATE as DATETIME2(0) = SYSDATETIME()
SELECT @DATE - 1

GO
DECLARE @DATE as DATE = SYSDATETIME()
SELECT @DATE - 1
Msg 206, Level 16, State 2, Line 4
Operand type clash: datetime2 is incompatible with int
Msg 206, Level 16, State 2, Line 3
Operand type clash: date is incompatible with int

#FICA_A_DICA

Xupinhado de: http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx

Mais uma que não conhecia, sempre temos algo para aprender 🙂

O GROUP BY ALL mostra a soma dos valores “ZERADOS” desconsiderando o filtro do WHERE

SELECT collation_name as COLLATION, COUNT(*) as [COUNT]
FROM sys.databases
WHERE collation_name = 'SQL_Latin1_General_CP1_CI_AS'
GROUP BY ALL collation_name

COLLATION                    COUNT
---------------------------- -----------
Latin1_General_CI_AS         0
Latin1_General_CI_AS_KS_WS   0
SQL_Latin1_General_CP1_CI_AS 5

(3 row(s) affected)

Hoje estava estudando para certificação 70-433 descobri algo que desconhecia até então, é possivel fazer uma soma “SUM”, média “AVG”, etc sobre um conjunto ou subconjunto de registros… Melhor ver na pratica…

SELECT
	[database_id]
	,[name]
	,[compatibility_level]
	,COUNT(*) OVER() as [QTD_TOTAL_DATABASES]
	,COUNT(*) OVER(partition by [compatibility_level]) as [QTD_TOTAL_DATABASES_DO_MESMO_COMPLEVEL]
FROM SYS.databases
ORDER BY [database_id]




REF: http://msdn.microsoft.com/en-us/library/ms189461.aspx

Como vocês sabem não tenho muita paciencia para escrever, mas segue abaixo algumas funções novas do T-SQL no SQL Denali as funções são auto-explicativas… Ou como diria um amigo meu: “o código é a própria documentação

Continue lendo »


Usei o código do artigo (http://sqlblog.com/blogs/jamie_thomson/archive/2010/11/14/convert-an-integer-seconds-value-into-words-in-reporting-services.aspx) para gerar a versão em T-SQL para transformar tempo

(Segundo) em String (1d 3h 46m 40s)

Continue lendo »


Hoje li um post em um blog sobre Desenvolvimento baseado em Performance (Performance-Driven Development) e gostaria de comentar com vocês

Hoje em dia quando desenvolvemos um T-SQL, vamos lá fazemos um “SELECT *” só para “dar uma olhada nos dados”, faço um JOIN outro SELECT *, mais um JOIN outro SELECT *, porém quando estamos desenvolvendo sobre o SQL Azure onde os dados trafegados pela rede são cobrados, começamos a quebrar o paradigma dos SELECTs aleatórios, devemos pensar melhor cada select feito na base como por exemplo imagina que existe um campo binario, você esta fazendo os testes e manda um SELECT * e da-lhe cobrança 😛

Será que começaremos a ser cobrados ($$$) por código ruim???


Muitas vezes você já deve ter necessitado apagar tabelas em ambiente de desenvolvimento, e até porque não em produção 🙂

Ai você pensa, vou mandar logo um TRUNCATE TABLE, mas infelizmente não é possível fazer um TRUNCATE TABLE em uma tabela com FK, ai você pensa “vai dá uma preguiça dropar e recriar todas FK”. entãoE você logo pensa, “DELETE na cabeça”, mas se você vai deletar você tem que analisar o que deletar antes do que, por exemplo, você não pode deletar um cliente se existe uma venda associada a ele.

Resumindo, se você precisar limpar umas tabelas sem se preocupar muito use o script abaixo, ele irá desabilitar as constraints e reabilitar após alterações


EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'

--DELETA O QUE FOR NECESSÁRIO

EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'