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.

[sourcecode language=”sql”]
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
[/sourcecode]

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

[sourcecode language=”sql”]
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
[/sourcecode]

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:

[sourcecode language=”sql”]
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
[/sourcecode]

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

[sourcecode language=”sql”]
SELECT * FROM T_SEQUENCE;

GO
[/sourcecode]

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.

 

3 comentários

    • Bom dia tudo bem?

      Sim é possível, segue abaixo o exemplo.

      CREATE FUNCTION F_VALOR_CORRENTE(@V_NOME_SEQUENCE VARCHAR(30))
      RETURNS INT
      AS
      BEGIN
      DECLARE @V_VALOR_CORRENTE INT;

      SELECT @V_VALOR_CORRENTE = CONVERT(INT, CURRENT_VALUE)
      FROM SYS.SEQUENCES
      WHERE NAME = @V_NOME_SEQUENCE;

      RETURN @V_VALOR_CORRENTE
      END

      SELECT DBO.F_VALOR_CORRENTE(‘S_T_SEQUENCE’)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.