O que vem por aí: SQL Server “Denali” – 1

Estou fazendo os primeiros contatos com a próxima versão do SQL Server, code-named Denali.

O download do CTP pode ser feito em http://go.microsoft.com/fwlink/?LinkID=205500.

Uma das novidades nesta versão é a possibilidade de criar SEQUENCES (não lembro qual banco tinha isso, vou perguntar para o “Oráculo”, he he).

Assim, olhei na documentação preliminar do produto como criar e utilizar a funcionalidade:

CREATE SEQUENCE [schema_name . ] sequence_name
        [ <sequence_property_assignment> [ ,…n ] ]
    [ ; ]

<sequence_property_assignment>::=
{
    [ AS { built_in_integer_type | user-defined_integer_type } ]
    | START WITH <constant>
        | INCREMENT BY <constant>
        | { MINVALUE <constant> | NO MINVALUE }
        | { MAXVALUE <constant> | NO MAXVALUE }
        | { CYCLE | NO CYCLE }
        | { CACHE [<constant> ] | NO CACHE }
}

Exemplo:

CREATE SEQUENCE Test.DecSeq
    AS decimal(3,0)
    START WITH 125
    INCREMENT BY 25
    MINVALUE 100
    MAXVALUE 200
    CYCLE
    CACHE 3
;

Há duas situações que são solecionadas com este novo tipo de objeto:

  1. Quando uma tabela tem uma coluna do tipo IDENTITY, só obtemos estes valor após fazer a inserção de um novo registro.
  2. Quando queremos saber o maior valor armazenado em uma coluna e adicionar um (SELECT MAX(coluna) + 1 – tabela de nota fiscal, por exemplo), ocorre bloqueio na tabela durante a leitura, mas não durante a gravação do novo registro (exceto com alteração do ISOLATION LEVEL para SERIALIZABLE, por exemplo).
    .

Agora, um exemplo de como criar uma tabela usando uma sequence como valor padrão de uma coluna:

CREATE SEQUENCE Test.DepartmentSeq
    AS smallint
    START WITH 1
    INCREMENT BY 1 ;
GO

CREATE TABLE Test.Department (
    ID int NOT NULL,
    [Name] varchar(100) NOT NULL
    )
GO
ALTER TABLE Test.Department
    ADD CONSTRAINT DefSequence DEFAULT (NEXT VALUE FOR Test.DepartmentSeq)
        FOR ID;
GO

Ainda há tratamentos (que dependem de aplicação) que precisam ser levados em conta, como “buracos” na sequência; uma vez que o próximo valor seja obtido (SELECT NEXT VALUE FOR <SEQUENCE>), se não for aproveitado, por padrão ele não será retornado novamente.

Bons estudos!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s