Criando SEQUENCE no SQL Server

Um dos bons recursos que o SQL Server apresentou a partir da versão 2012 foi a opção de criar sequence no banco de dados, assim  como seu concorrente direto Oracle já faz.

Nesse post será visto como criar uma sequence no SQL Server, como fazer o uso da mesma em um insert, enfim, explicar todo o funcionamento do novo recurso.

Primeiramente, será criado uma tabela simples a qual a sequence será associada posteriormente.

IF (OBJECT_ID('dbo.T_SEQUENCE')) IS NOT NULL
	DROP TABLE T_SEQUENCE;	

CREATE TABLE T_SEQUENCE
(
	CD_SEQ INT NOT NULL PRIMARY KEY,
	DS_SEQ VARCHAR(50)
);

GO

Após executar o script de criar a tabela, será criada a sequence que é o foco principal do post.

IF (OBJECT_ID('dbo.S_T_SEQUENCE')) IS NOT NULL
	DROP SEQUENCE S_T_SEQUENCE;

GO

CREATE SEQUENCE S_T_SEQUENCE
AS INT
START WITH 1
INCREMENT BY 1;

GO

A sequence é composta pelo seu respectivo nome ‘CREATE SEQUENCE S_T_SEQUENCE‘, qual o tipo de dados ‘AS INT‘, qual seu valor inicial ‘START WITH 1‘ e o valor que será incrementado ‘INCREMENT BY 1‘ seja ele de 1 em 1 ou de 2 em 2.

Pronto, sequence criada, agora como fazer um insert em uma tabela fazendo o uso da sequence criada?

A diferença é basicamente que no lugar de informar um valor para o campo “CD_SEQ” de forma manual, basta informar “NEXT VALUE FOR S_T_SEQUENCE“, assim cada vez que realizar o insert com “NEXT VALUE FOR S_T_SEQUENCE” o valor da sequence será incrementado, exemplo do insert utilizando a sequence:

INSERT INTO T_SEQUENCE (CD_SEQ, DS_SEQ)
VALUES	(NEXT VALUE FOR S_T_SEQUENCE, 'T-SQL'),
		(NEXT VALUE FOR S_T_SEQUENCE, 'TSQL'),
		(NEXT VALUE FOR S_T_SEQUENCE, 'T_SQL');

GO

Enfim o resultado do insert que foi realizado fazendo o uso da sequence.

SELECT * FROM T_SEQUENCE;

GO

SEQUENCE_SQL_SERVER

 

 

 

 

A mesma sequence pode ser utilizada em várias tabelas diferentes, pois, não existe uma sequence para uma tabela e sim uma sequence para N tabelas, porém, não é uma boa pratica fazer o uso de uma mesma sequence em tabelas diferentes, o ideal e mais organizado é uma sequence para cada tabela.

 

Papéis do banco de dados

Papéis do banco de dados

Bancodedados

  • dbo/db_owner: especifica o proprietário do banco de dados.
  • db_accessadmin: Pode gerenciar o acesso ao banco de dados para logins.
  • db_backupoperator: pode fazer o backup do banco de dados.
  • db_datareader: Pode ler os dados de todas as tabelas definidas pelo usuário.
  • db_datawriter: Pode executar qualquer ação de escrita em tabelas de usuários.
  • db_ddladmin: Pode executar ações de Data Definition Language (DDL), como criação de tabelas.
  • db_denydatareader: Não pode ler os dados das tabelas definidas pelo usuário.
  • db_denydatawriter: Não pode escrever dados das tabelas definidas pelo usuário.
  • db_securityadmin: Pode modificar os integrantes do papel de banco de dados e gerenciar permissões.
  • public: Pode ver qualquer objeto do banco de dados criado com acesso publico ou de direitos completos (todos os usuários criados pertencerão a esse papel).

Conhecendo as Funções de Servidor do SQL Server

Conhecendo as Funções de Servidor do SQL Server.

  • bulkadmin: Executar declarações de BULK INSERT.
  • dbcreator: Criar, alterar ou remover bancos de dados, assim como restaurá-los.
  • diskadmin: Administrar arquivos do SQL Server em disco.
  • processadmin: Cancelar um login que esteja executando um código T-SQL.
  • public: Visualiza qualquer permissão de banco de dados mas não altera nenhuma.
  • securityadmin:  Gerenciar logins, incluindo as senhas de logins do SQL Server e as permissões de login.
  • serveradmin: Administrar o servidor e executar tarefas como alteração de opções e até mesmo inicializar e desligar o servidor.
  • setupadmin: Trabalhar com mais de um servidor com os quais esteja vinculado e gerenciar as definições dos servidores vinculados.
  • sysadmin: Executar qualquer atividade:

É possível que eu mesmo crie uma função, por exemplo, publicadmin?

Não é possível criar sua própria função no SQL Server.

FunçõesdeServidor

Conhecendo o Object Explorer do SQL Server

É provável que esse seja o Explorer mais utilizado, já que ele detalha todos os objetos, todos os itens de segurança e muitas outras áreas do SQL Server.

Nós SQL Server

  • Databases / Bancos de Dados: Armazena os bancos de dados do sistema e de usuário do SQL Server que você está conectado.
  • Security / Segurança: Detalha a lista de todos os logins que pode conectar ao SQL Server.
  • Server Objects / Objetos de Servidor: Detalha objetos como dispositivo de backup e oferece uma lista de servidores vinculados, onde um servidor é conectado a outro servidor remoto.
  • Replication / Replicação: Mostra os detalhes que envolvem a replicação dos dados de um banco de dados deste servidor para outro banco de dados (ou esse ou em outro servidor) ou vice-versa.
  • Management / Gerenciamento: Detalha os planos de manutenção,  política de gerenciamento, coleta de dados e configuração do DatabaseMail e fornece um log de mensagens informativas e de erro que podem ser muitos uteis ao resolver problemas no SQL Server.
  • SQL Server Agent: Cria e executa tarefas no SQL Server em determinados horários, com detalhes do sucesso ou das falhas enviados a pagers, e-mail ou operadores definidos no SQL Server. A execução desses jobs e as notificações de falha ou de sucesso são gerenciamentos pelo SQL Server Agent, e os detalhes podem ser encontrados nesse nó.

 

Fonte: Microsoft SQL Server 2008 para Desenvolvedores

Diferenças entre DELETE e TRUNCATE

Quais as diferenças entre DELETE e TRUNCATE

O comando DELETE e o comando TRUNCATE ambos são usados para apagar dados de uma tabela e não a estrutura da tabela.

O comando DELETE remove as linhas de uma tabela e tem a seguinte sintaxe básica:

DELETE FROM SUATABELA WHERE CODIGO = 1;

Por outro lado, o comando TRUNCATE remove todas as linhas de uma tabela sem efetuar as exclusões de linhas individuais, e tem a seguinte sintaxe básica:

TRUNCATE TABLE SUATABELA;

Resumo das diferenças entre o comando DELETE e o comando TRUNCATE.

DELETE

TRUNCATE

A eliminação de cada linha é registrada e fisicamente excluída. Registro será feito pela desalocação de páginas de dados no qual os dados existe.
Permite a exclusão de linhas que não viole a restrição de chave estrangeira. Não permite que o comando TRUNCATE seja executado em uma tabela que é referenciada por uma restrição de chave estrangeira. A restrição de chave estrangeira precisa ser descartada em primeiro lugar, em seguida, truncar a tabela, e então recriar a restrição.
A coluna de identidade não retorna para o valor inicial, por exemplo, um. Redefine qualquer coluna de identidade na tabela truncada para o valor inicial.
Permite a exclusão condicional de linhas especificando a condição na cláusula WHERE. Exclui todas as linhas na tabela e não pode especificar uma deleção condicional de linhas.
O comando DELETE é uma linguagem de manipulação de dados (DML) de comando. O comando TRUNCATE é um Data Definition Language (DDL) de comando.

Como saber o número de transações ativas?

Como saber o número de transações ativas?

Para que possamos identificar o número de transações ativas para conexão atual, basta executar o comando @@TRANCOUNT, o mesmo irá retornar o número de transações ativas para a conexão atual.

Sintaxe:

@@TRANCOUNT

Exemplo:

SELECT @@TRANCOUNT

Tipos de dados numéricos SQL Server

SQL Server tipos de dados numéricos

O SQL Server suporta nove diferentes tipos de dados numéricos, quatro tipos de dados que armazenam valores inteiros de vários tamanhos, dois tipos de dados que armazenam valores monetários, e quatro tipos de dados que armazenam decimal baseados em números com precisão variável. Aqui está um resumo dos tipos de dados numéricos disponíveis no SQL Server junto com a faixa de valores, juntamente com o espaço de armazenamento necessários classificados de acordo com o tipo de dados precedência mais alta para a mais baixa:

Tipo de dados

Valores

Espaço Utilizado

Float –1.79308 to –2.23-308, 0, e 2.23-308 to 1.79308 4 bytes ou 8 bytes
Real –3.4038 to –1.18-38, 0, e  1.18-38 to 3.4038 4 bytes
Decimal –1038 + 1 Para 1038 – 1 5 Para 17 bytes
Money -922,337,203,685,477.5808 Para 922,337,203,685,477.5807 8 bytes
Smallmoney -214,748.3648 Para 214,748.3647 4 bytes
Bigint -263 (-9,223,372,036,854,775,808) Para 263 – 1 (9,223,372,036,854,775,807) 8 bytes
Int -231 (-2,147,483,648) Para 231 – 1 (2,147,483,647) 4 bytes
Smallint -215 (-32,768) Para 215 – 1 (32,767) 2 bytes
Tinyint 0 to 255 1 byte

 

Como posso contar o número de linhas em uma tabela?

Como posso contar o número de linhas em uma tabela?

Para obter o número de linhas em uma tabela, você vai usar a função de agregação COUNT.


SELECT COUNT (*) AS QTDE FROM TABELA

A função de agregação COUNT retorna o número de itens em um grupo. COUNT (*) especifica que todas as linhas devem ser contadas para retornar o número total de linhas em uma tabela. COUNT (*) retorna o número de linhas em uma tabela especificada sem eliminar linhas duplicadas. Ele conta cada linha separadamente, inclusive as linhas que contêm valores nulos.

Como posso identificar registros duplicados em uma tabela?

Como posso identificar registros duplicados em uma tabela?

Para identificar registros duplicados em uma tabela, você vai usar o GROUP BY cláusula da instrução SELECT. Vamos  criar a tabela e inserir os dados para que possamos ver como fazer. Sua instrução SQL ficará da seguinte forma:

CRIANDO TABELA E INSERINDO OS DADOS:


CREATE TABLE T_REGISTRODUPLICADO
(
 CODIGO INT NOT NULL,
 DESCRICAO VARCHAR(50)
);

INSERT INTO T_REGISTRODUPLICADO (CODIGO,DESCRICAO) VALUES (1, 'REGISTRO 1');
INSERT INTO T_REGISTRODUPLICADO (CODIGO,DESCRICAO) VALUES (2, 'REGISTRO 2');
INSERT INTO T_REGISTRODUPLICADO (CODIGO,DESCRICAO) VALUES (3, 'REGISTRO 3');
INSERT INTO T_REGISTRODUPLICADO (CODIGO,DESCRICAO) VALUES (1, 'REGISTRO 1');
INSERT INTO T_REGISTRODUPLICADO (CODIGO,DESCRICAO) VALUES (1, 'REGISTRO 1');
INSERT INTO T_REGISTRODUPLICADO (CODIGO,DESCRICAO) VALUES (1, 'REGISTRO 1');

Como ver os registros duplicados:


SELECT CODIGO, DESCRICAO FROM T_REGISTRODUPLICADO
GROUP BY CODIGO, DESCRICAO
HAVING COUNT(*)>1

Esta consulta irá lhe retornar os registros duplicados com base no código e descrição. Se você quer saber quantas vezes esses registros são duplicados na tabela, você pode simplesmente incluir o COUNT (*) na saída:


SELECT CODIGO, DESCRICAO, COUNT(*) FROM T_REGISTRODUPLICADO
GROUP BY CODIGO, DESCRICAO
HAVING COUNT(*)>1

Se você quer o resultado ordenado pela combinação mais duplicado do código e descrição, você pode incluir a cláusula ORDER BY da seguinte forma:


SELECT CODIGO, DESCRICAO, COUNT(*) FROM T_REGISTRODUPLICADO
GROUP BY CODIGO, DESCRICAO
HAVING COUNT(*)>1
ORDER BY COUNT(*) DESC

Faça o download do arquivo de exemplo clicando no link: registrosduplicados