martes, 15 de diciembre de 2020

Secuencias en SQL SERVER

Buenos días queridos lectores, el día de hoy veremos como crear secuencias en SQL SERVER, pero primero tenemos que responder la pregunta ¿Qué es secuencia?, todos entendemos el concepto de secuencia, pero a la hora de definirlo, ahí surgen los problemas


¿Qué es una secuencia?


Al hablar de secuencia en base de datos, debemos retomar el concepto matemático de secuencia.

Para las matemáticas una secuencia o una sucesión es un grupo de números o de otros elementos matemáticos que forman un conjunto ordenado. Un ejemplo de secuencia matemática es la sucesión de números impares, que resulta infinita: 1, 3, 5, 7, 9…


Pues bien, una secuencia es un objeto enlazado a un esquema definido por el usuario que genera una secuencia de valores numéricos según la especificación con la que se creó la secuencia. La secuencia de valores numéricos se genera en orden ascendente o descendente en un intervalo definido y se puede configurar para reiniciarse (en un ciclo) cuando se agota. Las secuencias, a diferencia de las columnas de identidad, no se asocian a tablas concretas. 
Pues bien, la característica de secuencia está disponible a partir de la versión 2012 de SQL SERVER, y es algo similar a la IDENTIDAD.

Las secuencias, a diferencia de las identidades, podemos tener más de una por tabla, si recordamos solamente un campo de la tabla puede ser IDENTITY, por lo cual, si quisiéramos tener mas de un campo secuencial, podríamos utilizar las secuencias, además de la identidad. 

Pero pasemos al ejemplo y vamos haciéndolo que es lo que nos gusta y como aprendemos.

Crear la secuencia


Antes que otra cosa crearemos la base de datos de ejemplo y posterior a eso sobre la base de datos que vamos a crear, crearemos la secuencia.


create database pruebas

go

 

use pruebas

go


Ejemplo 1: Crear una secuencia que comience con el número 1001 y se vaya incrementando de 1 en 1 hasta el infinito o hasta que el valor int llegue a su límite


create sequence personaseq as int

start with 1001 increment by 1


En este pequeño código estamos creando una secuencia llamada personaseq, cuyo valor iniciará en 1001 y se incrementará de uno en uno, ahora vamos a crear y llenar una tabla para observar como funciona la secuencia.

create table persona (

id int primary key identity,

nombre varchar(max),

apellidop varchar(max),

apellidom varchar(max),

secuencia int default (next value for [personaseq]) not null).

GO

insert into persona (nombre, apellidop, apellidom) values ('Emmanuel', 'Urias', 'Robles')

insert into persona (nombre, apellidop, apellidom) values ('Luis', 'Gonzalez', 'Hernandez')

insert into persona (nombre, apellidop, apellidom) values ('Maria', 'Hernandez', 'Pérez')




Ejemplo 2: Crear una secuencia que comience con el número 1001 y se vaya incrementando de 1 en 1 hasta el 1005

create sequence personaseq as int

start with 1001

increment by 1

maxvalue 1005

no cycle


Como podemos observar, se establecen valores máximos, mediante el parámetro maxvalue, también le indicamos a la secuencia que no será ciclica, es decir, al llegar al máximo no se repetiría la serie

 

create table persona (

id int primary key identity,

nombre varchar(max),

apellidop varchar(max),

apellidom varchar(max),

secuencia int default (next value for [personaseq]) not null)

 

insert into persona (nombre, apellidop, apellidom) values ('Emmanuel', 'Urias', 'Robles')

insert into persona (nombre, apellidop, apellidom) values ('Luis', 'Gonzalez', 'Hernandez')

insert into persona (nombre, apellidop, apellidom) values ('Maria', 'Hernandez', 'Pérez')

insert into persona (nombre, apellidop, apellidom) values ('Laura', 'López', 'Márquez')

insert into persona (nombre, apellidop, apellidom) values ('Julián', 'Velazquez', 'Carrillo')


select * from persona




Como vemos la secuencia esta correcta, pero ya llegó a su límite máximo, ¿Qué pasará si queremos ingresar un nuevo valor?

insert into persona (nombre, apellidop, apellidom) values ('Margarita', 'Chavez', 'Herrera')


Msg 11728, Level 16, State 1, Line 26

The sequence object 'personaseq' has reached its minimum or maximum value. Restart the sequence object to allow new values to be generated.


En este caso, marca un error, ya que la secuencia llego a su máximo valor, por lo cual tendríamos que reiniciar la secuencia o modificarla para aumentar el valor máximo.

Ejemplo 3: Crear una secuencia que comience con el número 1001 y se vaya incrementando de 1 en 1 hasta el 1005, y que el valor se reinicia de manera cíclica

create sequence personaseq as int

start with 1001

increment by 1

maxvalue 1005

minvalue 1001

cycle

go


Como podemos observar, se establecen valores máximos, mediante el parámetro maxvalue, también le indicamos a la secuencia que será ciclica, es decir, al llegar al máximo la serie se repite comenzando por el minvalue

 

create table persona (

id int primary key identity,

nombre varchar(max),

apellidop varchar(max),

apellidom varchar(max),

secuencia int default (next value for [personaseq]) not null)

 

insert into persona (nombre, apellidop, apellidom) values ('Emmanuel', 'Urias', 'Robles')

insert into persona (nombre, apellidop, apellidom) values ('Luis', 'Gonzalez', 'Hernandez')

insert into persona (nombre, apellidop, apellidom) values ('Maria', 'Hernandez', 'Pérez')

insert into persona (nombre, apellidop, apellidom) values ('Laura', 'López', 'Márquez')

insert into persona (nombre, apellidop, apellidom) values ('Julián', 'Velazquez', 'Carrillo')

insert into persona (nombre, apellidop, apellidom) values ('Margarita', 'Chavez', 'Herrera')




Como vemos la secuencia esta funcionando correctamente, llega a su valor máximo y al ingresar un nuevo valor, se reinicia al valor mínimo configurado.

Modificar una secuencia


Para modificar una secuencia ejecutaremos la sentencia ALTER como sigue:

alter sequence personaseq

restart with 1005

increment by 2

maxvalue 1010

minvalue 1005

cycle

go


Utilizaremos el parámetro Restart en lugar de Start.

Eliminar una sentencia


Para eliminar una sentencia utilizaremos la sentencia DROP

drop sequence personaseq


Hasta aquí el post, espero que sea de su agrado y utilidad, espero compartan, comenten, pregunten si tienen alguna duda y den clic a algún anuncio patrocinado

Referencias


Definicion.de. (15 de 12 de 2020). Obtenido de https://definicion.de/secuencia/

Microsoft. (15 de 12 de 2020). Microsoft Docs. Obtenido de https://docs.microsoft.com/es-mx/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver15

Microsoft. (15 de 12 de 2020). Microsoft Docs. Obtenido de https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-sequence-transact-sql?view=sql-server-ver15

Salmun, N. (15 de 12 de 2020). Teknoda Tips. Obtenido de http://www.teknodatips.com.ar/as400/247-que-es-secuencia-sql-en-db2-as400.html

 


No hay comentarios.:

Publicar un comentario

Cómo crear una empresa en Contpaqi Comercial

 En este post se mostrará la manera de crear una empresa en el sistema  Contpaqi© Comercial,  en caso de tener alguna duda, estamos a sus or...