Para quem não conhece a sequence é um contador que gera
valores normalmente utilizados para inicializar chaves primárias de tabelas,
seguindo critérios estabelecidos no momento da criação da sequence.
Uma das vantagens sobre colunas do tipo Identity é que uma
sequence pode ser utilizada por várias tabelas.
Sintaxe:
CREATE SEQUENCE [schema_name . ]
sequence_name
[
AS [ built_in_integer_type | user-defined_integer_type ] ][ START WITH
[ INCREMENT BY
[ { MINVALUE [
[ { MAXVALUE [
[ CYCLE | { NO CYCLE } ]
[ { CACHE [
[ ; ]
Para explicar o funcionamento deste recurso vou utilizar o
exemplo abaixo:
Considere uma tabela com dois campos: MesAno e TotalSalario
que não possui chave, vamos incluir uma coluna ID do tipo inteiro, e
colocaremos como valor default o valor atual de uma Sequence (IdSalarios)
criada abaixo. Também serão atualizados todos os registros previamente existentes
com um valor da sequence:
-- Script de criação da Tabela
CREATE TABLE [dbo].[TotalSalarios](
[MesAno] [datetime] NOT NULL,[TotalSalario] [decimal](11, 2) NULL);
MesAno
|
TotalSalario
|
2011-01-01 00:00:00.000
|
89500.00
|
2011-02-01 00:00:00.000
|
91200.00
|
2011-03-01 00:00:00.000
|
93200.00
|
2011-04-01 00:00:00.000
|
97200.00
|
2011-05-01 00:00:00.000
|
101250.00
|
2011-06-01 00:00:00.000
|
103000.00
|
2011-07-01 00:00:00.000
|
103000.00
|
2011-08-01 00:00:00.000
|
105020.00
|
-- Criação da Sequence com o nome IdSalarios
CREATE SEQUENCE dbo.IdSalarios AS INT
MINVALUE 1 -- Menor valor da Sequence
MAXVALUE 10000 -- Maior valor da sequence
START WITH 1 -- Valor inicial da Sequence
CYCLE; -- Indica para a sequence reiniciar do menor
-- valor (1) quando atingir o
-- maior valor (10000)
-- Criação da coluna ID
Alter Table TotalSalarios Add ID int;
-- Criando uma constraint para definir o valor da sequence como valor default da coluna ID
ALTER TABLE TotalSalarios
ADD CONSTRAINT Seq_IDSalarios DEFAULT (NEXT VALUE FOR IdSalarios) FOR Id
-- Inicializando os valores existentes com o próximo valor da sequence
Update TotalSalarios
set ID = Next Value For IdSalarios;
-- Inserindo um registro novo deixando sem informar valor para ID
Insert into TotalSalarios (MesAno, TotalSalario) Values('2011-09-01',11000);
MesAno
|
TotalSalario
|
2011-01-01 00:00:00.000
|
89500.00
|
2011-02-01 00:00:00.000
|
91200.00
|
2011-03-01 00:00:00.000
|
93200.00
|
2011-04-01 00:00:00.000
|
97200.00
|
2011-05-01 00:00:00.000
|
101250.00
|
2011-06-01 00:00:00.000
|
103000.00
|
2011-07-01 00:00:00.000
|
103000.00
|
2011-08-01 00:00:00.000
|
105020.00
|
2011-09-01 00:00:00.000
|
11000.00
|
Nenhum comentário:
Postar um comentário