Transações no MS SQL Server

Tags

,

Olá pessoal!

Hoje o assunto é sobre transações no Microsoft SQL Server, onde você saberá para que serve e quando utilizar.

Toda transação de UPDATE, DELETE e até de INSERT você pode garantir que o dado volte ao ponto anterior antes de ser alterado, excluído ou que também não seja inserido, utilizando no inicio de sua query(Script) o comando BEGIN TRANSACTION ou apenas BEGIN TRAN.

Esse comando tem a utilidade de preparar o SQL Server para um ponto de restauração do dado(s), caso seja necessário.

Se for necessário retornar o dado no estado anterior, pode utilizar o comando ROLLBACK TRANSACTION ou apenas ROLLBACK. Mas, caso você precisa garantir que o dado inserido, atualizado ou deletado seja confirmado, basta utilizar o comando COMMIT TRANSACTION ou apenas COMMIT.

Abaixo um exemplo com os três comandos, veja:

BEGIN TRANSACTION

UPDATE Cliente SET DataAtualizacao = getdate() WHERE IdCliente = 1

IF@@ERROR <> 0

ROLLBACK TRANSACTION

ELSE

COMMIT TRANSACTION

Lembre-se, esses três comandos, podem evitar uma baita dor de cabeça em caso de acidente. Veja exemplo abaixo:

Você preparou sua linha de comando que fará uma atualização em 100 mil linhas, mas aí você esquece de colocar o comando WHERE (Essencial colocar), com isso você todo empolgado na pressa para terminar a tarefa e sair sorrindo, executa o comando, e logo percebe que em vez de atualizar a quantidade de 100, atualizou 700 mil linhas, o que fazer nessa hora? Se você tiver um backup da tabela antes de realizar as alterações devidas, muito bem, o trabalho de recuperação será mais rápido, senão, você terá que trabalhar mais para voltar os 700 mil registros ao estado anterior, isso por acidente, pense nisso em um ambiente que não se deve perder tempo com RETRABALHO?

Bom fica a dica sobre transações, vou preparar outro post para falar de SET IMPLICIT_TRANSACTION ON/OFF e SAVE TRANSACTION.

Espero ter ajudado.

Até mais…

Felippe Oliveira

Funções de classificação

Olá pessoal!

Hoje o assunto é sobre funções de classificação, em jornada rumo a prova 70-461, aprendi que podemos classificar grupos de dados.
Essas funções nos auxiliam em criação de ranking, ou seja ordenação dos conjuntos de dados.
São elas:
RANK();
DENSE_RANK();
NTILE();
ROW_NUMBER();

Funções que podem ser utilizadas em diferentes situações, abaixo um exemplo simples de cada, para um melhor entendimento.
Para os exemplos a seguir, foram criados tabelas alunos, disciplina e notas.

RANK(): Classifica o conjunto de dados mantendo um GAP na ordenação.
O exemplo abaixo faz com que a classificação seja agrupado pela quebra e assim mantendo o contador do numero da linha.

SELECT DISTINCT RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome

Ordem Disciplina
1 Biologia
11 Geografia
21 História
31 Matetmática
41 Português

DENSE_RANK(): Mantém a classificação em ordem no agrupamento;

SELECT DISTINCT DENSE_RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad  ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome

Ordem Disciplina
1 Biologia
2 Geografia
3 História
4 Matetmática
5 Português

NTILE(): Agrupa pela quantidade de grupos que você informar.

SELECT DISTINCT NTILE(2)OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome

Ordem Disciplina
1 Biologia
1 Geografia
1 História
2 Matetmática
2 Português

ROW_NUMBER(): Ordena sem ter gap entre os grupos.
SELECT DISTINCT ROW_NUMBER()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome

Ordem Disciplina
1 Biologia
2 Geografia
3 História
4 Matetmática
5 Português

Com as funções de classificação é possível ordenar os grupos e ajustar a sua consulta de acordo com o solicitado.

Ainda é possível utilizar o comando PARTITION BY, mas a explicação de como utiliza-lo ficará para um próximo post.

Espero ter ajudado.

Até mais…

Felippe Oliveira

70-461 Passei…

Olá!

Recentemente realizei a prova 70-461 de Querying Microsoft SQL Server 2012/2014 e passei, para conseguir a façanha não foi assim tão fácil, foi necessário aprender algumas das novas funcionalidades e saber utilizar o que já existia desde outras versões do MS SQL Server, como por exemplo, funções de classificação,  function,  CTE (common_table_expression), entre outros.
Vou continuar a postar sobre essas funcionalidades que nos ajudam diariamente.
Para aqueles que ainda não realizaram a prova, fica algumas dicas de estudo abaixo:

  • Entenda como funciona e quando utilizar Triggers;
  • Views, como criar, entenda suas vantagens;
  • Function ou Funções, experimente os tipos de retorno;
  • Planos de execução e Otimização de consultas;
  • XML;
  • Sequence X Identity;

Agora bora estudar para 70-463 Implementing a Data Warehouse with Microsoft SQL Server 2012/2014, mas como informei, vou preencher esse blog com dicas e informações sobre desenvolvimento de querys entre outros assuntos;

Espero poder ajudar mais.

Até o próximo post e bons estudos.

Felippe Oliveira

Começando do Zero | 70-461

Tags

,

Olá pessoal!

Em outros posts falei sobre criação e alteração de tabela, mas aí pensei, e se você não tem muita ideia de como criar um banco de dados? Como criar uma tabela sem saber criar o banco? Por esse motivo decidi publicar aqui um simples script, agora vou partir do principio em questão a objetos, não vou me referir a modelagem, que poderá ser descrito em outro post.

“Começando do zero”, imagine que uma loja qualquer, precisa armazenar seus produtos e para isso é necessário cadastra-los em um banco de dados, então vamos criar esse banco e assim poderemos continuar o aprendizado em relação aos objetos que veremos mais adiante.

Considero que você tenha o SQL server instalado em sua máquina, pode ser até o SQL Server Express. E que também tenha o SSMS (SQL Server Management Studio) para iniciarmos, vou chamar daqui em diante a ferramenta de SSMS.

Para abrir o SSMS, escreva na caixa de pesquisa do windows a sigla e assim logo irá aparecer… Clique para começar.

Depois de aberto, clique em novo/new dependendo se sua ferramenta estiver em português ou inglês, com isso será aberto uma página em branco. Agora podemos começar a escrever em T-SQL (Transact – SQL Server).

Veja o primeiro comando:

use master
go

O comando acima serve para deixarmos em uso o banco de sistemas, abaixo script para criar nosso primeiro banco de dados.

CREATE DATABASE [ESTOQUEPRODUTOS]
ON PRIMARY
( NAME = N’ESTOQUEPRODUTOS’, FILENAME = N’C:\BDS\ESTOQUEPRODUTOS.mdf’ , SIZE = 3072 KB , FILEGROWTH = 1024 KB )
LOG ON
( NAME = N’ESTOQUEPRODUTOS_log’, FILENAME = N’C:\BDS\ESTOQUEPRODUTOS_log.ldf’ , SIZE = 1024 KB , FILEGROWTH = 10%)
go

Você deve estar pensando, nossa quanto código para criar um banco, digo que, para se ter um banco de dados, você precisa definir um local onde armazenar os arquivos .mdf.ldf, que são arquivos de dados e de log. Você define na criação, o tamanho que os arquivos podem ter e quanto você quer que eles cresçam de acordo com seu tamanho de disco.

Aqui foi utilizado T-SQL para criação do banco, mas é possível fazer em modo design/gráfico/tela, não vou descrever aqui pois a minha intenção é de aprender e repassar utilizando a linguagem T-SQL.

Obs.: O script utilizado se refere a criação de banco de dados com MS SQL Server, para outros SGBDs pode existir algumas diferenças.

Espero poder ajudar com essa introdução.

Obrigado!

 

 

 

Alterando tabela com T-SQL | 70-461

Hoje vamos aprender como alterar tabela adicionando e removendo colunas.

O comando para adicionar uma coluna é bem simples, veja os exemplos abaixo:

ALTER table cliente ADD Naturalidade varchar(50) null

ou

ALTER table cliente ADD  Naturalidade varchar(50)

ALTER table cliente ADD  Naturalidade varchar(50)  not null*

A tabela acima é a mesma utilizada no post anterior.

*Podemos inserir uma coluna sem a necessidade de informar se ela será nula, mas se você tentar colocar not null e a tabela já conter valores(dados), você recebera uma mensagem de erro informando que não é possível inserir a nova coluna. Caso a tabela ainda não contenha dados o processo ocorrerá normalmente.

Retirar uma coluna é simples mesmo que ela contenha dados, veja o T-SQL abaixo:

ALTER table cliente DROP COLUMN Naturalidade

Por hoje fica mais esse aprendizado, breve volto com mais informações sobre criação de tabelas.

Obs.: Não deixem de comentar, sugerir ou até mesmo criticar, conto com sua ajuda também.

valeu.

 

 

 

Primeiro passo para 70-461

Hoje começo os estudos para essa prova que parece algo muito distante, vou colocar aqui tudo que eu aprender sobre T-SQL e deixar as dicar para vocês.

Essa semana será sobre o tópico “Criar objetos do banco de dados”

Partirei do principio que já temos um banco de dados criado e que conhecemos boa parte dos tipos de dados, como int (inteiro), varchar(Caracteres),  datetime (Data) entre outros, que podemos atribuir as colunas adicionadas na tabela.

Abaixo, comando para criar uma tabela com T-SQL:

create table cliente
(
pkIdCliente int identity(1,1) primary key not null,
Nome varchar(100) null,
DataNascimento date null,
DataCadastro datetime
);
go

O comando é bem simples, para ver funcionar, você precisa executar o mesmo dentro de SQL Server Management Studio vulgo(SSMS), com isso já teremos uma tabela criada em nosso banco de dados.

Clique aqui para ver estrutura completa de comandos de criação de tabela;

Existe outra maneira simples para se criar tabela, mas no caso, é necessário que já exista outra tabela criada; Segue exemplo abaixo:

select *
into clienteNovo
from cliente

Com o comando anterior, você cria uma tabela baseada em outra, nesse caso se a tabela anterior conter dados, você preenche a nova tabela com os mesmos dados.

Bom pessoal por hoje é só, amanhã coloco mais o que aprender sobre criação de tabelas e objetos.

Obs.: Não deixem de comentar, sugerir ou até mesmo criticar, conto com sua ajuda também.

Abraços

Como pode ser usado o data type FLOAT?

Na declaração do tipo de dados float, você pode colocar um valor explicito como não, lembrando das seguintes regras:

Campo float [N]; Onde N é o numero de bits;

nvalue precision Tamanho de armazenamento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

Site MSDN:  https://msdn.microsoft.com/pt-br/library/ms173773(v=sql.120).aspx

Abaixo um exemplo simples:

create table tabelafloat (tipocampo float(24))

Nesse caso se você tentar inserir mais que 7 dígitos o valor inserido a mais não vai aparecer conforme exemplo abaixo:

insert into tabelafloat values (789.123456)
select * from tabelafloat

O resultado será:

tipocampo
————-
789,1235

Ou seja o número 6 foi cortado fora e juntamente com ele o numero 4, não sei ainda dizer o por que, caso alguém saiba conte para nós.

O numero máximo N caso não seja definido será 53, conforme a tabela acima, esse corresponde a uma precisão de até 15 dígitos.

O Exemplo a seguir deixara o numero 4 de fora:

insert into tabelafloat values (567.1234567891234)

select * from tabelafloat

O resultado será:

tipocampo
———————-
567,123456789123

Retornando os 15 dígitos.

*Teste realizado nas versões SQL Server 2008 R2 e 2012.

Fica ai mais um aprendizado.

Abraços

 

 

 

70-462 Passei…

Olá,

Fiquei ausente aqui por alguns motivos pessoais, espero agora voltar  a publicar com uma maior frequência. Em Novembro realizei a prova de certificação da Microsoft de banco de dados 70-462, passei raspando, mas consegui.

Aprendi algumas coisas que muito em breve quero compartilhar aqui, pois nem tudo a gente encontra fácil na internet.

Para quem pretende fazer a prova, abaixo algumas dicas:

Estude bastante alwaysOn, backups, restore e segurança de instância;

São temas de extrema importância saber, pois as perguntas possuem muitas pegadinhas, por isso digo, estude.

Aproveite que a Microsoft está com a segunda chance, para quem não sabe é uma segunda tentativa de fazer a prova sem precisar pagar, caso não passe na primeira vez.

Essa segunda chance vai até o dia 12/01/2016, corra pois ainda você tem tempo.

Por enquanto é isso.

Obrigado!

 

 

 

Certificação MTA

Para você que sonha em ter uma certificação Microsoft e não tem conhecimentos avançados, saiba que existe a MTA (Microsoft Technology Associate), é a maneira mais simples de você começar sua carteira de certificações.

Para ser um MTA em banco de dados, você precisa fazer a prova 98-364, é uma prova simples, mas que também possui pegadinhas, nela são aplicados os conceitos básicos.

Aqui vou descrever algumas dicas que podem ajudar você a conquistar a sua primeira certificação Microsoft.

Noções sobre como os dados são armazenados em tabela;

Noções sobre DML (Linguagem de Manipulação de dados);

Noções sobre a linguagem de definição de dados (DDL);

Tipos de dados;

Criação de views com T-SQL;

Criação de procedimentos armazenados / Stored Procedure;

Consulta com Select simples e complexas;

Inserção, atualização e exclusão de dados;

Normalização de dados, somente 1FN, 2FN e 3FN;

Noções sobre chaves primárias, estrangeiras e compostas;

Índices;

Noções de segurança, backup e recuperação de banco de dados;

Com base nesses itens você conseguirá o minimo de 70% para ser aprovado.

Bons estudos…

Felippe Oliveira