{"id":1853,"date":"2020-05-25T22:43:26","date_gmt":"2020-05-25T22:43:26","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1853"},"modified":"2020-05-25T22:43:27","modified_gmt":"2020-05-25T22:43:27","slug":"secuencias-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1853","title":{"rendered":"Secuencias en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"259\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_D1.png\" alt=\"\" class=\"wp-image-1855\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Secuencias en SQL Server<\/h2>\n\n\n\n<p>Se puede definir una secuencia como un conjunto de valores que parten de un valor inicial, tienen un incremento o decremento, lo que significa que la secuencia puede ser ascendente o descendente y pueden tener un valor final. Adem\u00e1s se poder crear secuencias c\u00edclicas, es decir, secuencias que al llegar a su valor final se reinician a su valor inicial.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>SQL Server permite la creaci\u00f3n de secuencias que pueden ser utilizadas para la generaci\u00f3n de c\u00f3digos en las tablas. Lo m\u00e1s importante de las secuencias es que no est\u00e1n ligadas a ning\u00fan campo en una tabla.<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Tipos de datos permitidos en secuencias<\/strong><\/p>\n\n\n\n<p>El tipo de dato de la secuencia es un dato Entero, los tipos de datos permitidos son<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>tinyint <\/strong>&#8211; Rango 0 to 255<\/li><li><strong>smallint <\/strong>&#8211; Rango -32,768 to 32,767<\/li><li><strong>int <\/strong>&#8211; Rango -2,147,483,648 to 2,147,483,647<\/li><li><strong>bigint <\/strong>&#8211; Rango -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Este es el tipo de dato por defecto.<\/li><li><strong>decimal y numeric<\/strong> con una escala de CERO.<\/li><li><strong>Un tipo de dato definido por el usuario<\/strong> creado en base a los tipos anteriores.(<a href=\"https:\/\/manualsqlserver.com\/?p=131\" target=\"_blank\" rel=\"noreferrer noopener\">Ver tipos de datos definidos por el usuario<\/a>)<\/li><\/ul>\n\n\n\n<p style=\"font-size:22px\"><strong>La propiedad Identity<\/strong><\/p>\n\n\n\n<p><strong>Caracter\u00edsticas<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Identity es una propiedad que permite que un campo de tipo int en una tabla incremente su valor de manera autom\u00e1tica al insertar los registros en ella. <\/li><li>Para el uso de la propiedad Identity el tipo de dato debe ser entero Int.<\/li><li>Es necesario definir un valor inicial y un valor de incremento.<\/li><li>Es importante anotar que Identity no asegura la unicidad de valor, esta \u00fanicamente es posible con la restricciones Primary key, Unique o con el \u00edndice Unique. <\/li><li>Solamente puede existir una columna por tabla con la propiedad Identidad. (<a href=\"https:\/\/manualsqlserver.com\/?p=329\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Identity<\/a>)<\/li><\/ul>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:22px\"><strong>Secuencia vs. Identity<\/strong><\/p>\n\n\n\n<p>En SQL Server se debe usar una secuencia en lugar de la propiedad Identity en los siguientes casos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La aplicaci\u00f3n requiere obtener el valor antes de insertar el registro.<\/li><li>La aplicaci\u00f3n requiere compartir series de n\u00fameros entre multiples tablas o multiples columnas en las tablas.<\/li><li>La aplicaci\u00f3n requiere reiniciar el valor de la serie con un valor espec\u00edifico. Por ejemplo, reiniciar una secuencia que fue creada desde 1 hasta 100 con los mismos valores.<\/li><li>La aplicaci\u00f3n requiere valores que son ordenados por otro campo. <\/li><li>La instrucci\u00f3n \u00abNEXT VALUE FOR function\u00bb puede aplicarse la cl\u00e1usula Over en la funci\u00f3n de llamada.<\/li><li>Una aplicaci\u00f3n requiere multiples valores asignados al mismo tiempo. Por ejemplo, una aplicaci\u00f3n necesita obtener tres n\u00fameros seguidos al mismo tiempo.<\/li><\/ul>\n\n\n\n<p>USE Northwind<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Creaci\u00f3n de una secuencia<\/strong><\/p>\n\n\n\n<p><strong>Instrucci\u00f3n Create Sequence<\/strong><br>Crea una secuencia en SQL Server.<br>Create Sequence [Esquema. ] NombreDeSecuencia<br>[ AS [ TipoEntero | TipoEnteroDefinidoPorElUsuario ] ]<br>[ START WITH ]<br>[ INCREMENT BY ]<br>[ { MINVALUE [ ] } | { NO MINVALUE } ]<br>[ { MAXVALUE [ ] } | { NO MAXVALUE } ]<br>[ CYCLE | { NO CYCLE } ]<br><strong>Donde<\/strong><br><strong>NombreDeSecuencia<\/strong>: es el nombre de la secuencia a crear.<br><strong>TipoEntero<\/strong>: Tipo de dato entero de SQL Server. La tabla est\u00e1 definida l\u00edneas arriba.<br><strong>TipoEnteroDefinidoPorElUsuario<\/strong>: Tipo de dato definido por el usuario en base a los n\u00fameros enteros de SQL Server. (<a href=\"https:\/\/manualsqlserver.com\/?p=327\" target=\"_blank\" rel=\"noreferrer noopener\">Ver tipos de datos definidos por el usuario<\/a>)<br><strong>Start With<\/strong>: define el valor inicial<br><strong>Increment by:<\/strong> Define el incremento o decremento.<br><strong>MinValue<\/strong>: Especifica el valor m\u00ednimo, por defecto es CERO para el tipo tinyint y un valor negativo para el resto de tipos.<br><strong>MaxValue<\/strong>: Especifica el valor m\u00e1ximo. El valor por defecto est\u00e1 definido de acuerdo al valor m\u00e1ximo del tipo de dato entero. (Ver tabla arriba)<br><strong>Cycle<\/strong>: Permite que la secuencia se reinice cuando llega a su valor m\u00ednimo o m\u00e1ximo, dependiendo si es ascendente o descendente.<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicios<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejemplo 1<\/strong><\/p>\n\n\n\n<p><strong>Crear una secuencia con los valores por defecto<\/strong><br>Create sequence ValoresPorDefecto<br>go<\/p>\n\n\n\n<p><strong>Para visualizar los datos de la secuencia<\/strong><br>Select name, start_value, increment, maximum_value, minimum_value,<br>is_cycling, type, system_type_id, current_value<br>from sys.sequences where name = &#8216;ValoresPorDefecto&#8217;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_01-1024x93.png\" alt=\"\" class=\"wp-image-1856\" width=\"793\" height=\"71\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_01-1024x93.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_01-300x27.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_01-768x70.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_01.png 1298w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/figure>\n\n\n\n<p><strong>Note que el ID del tipo de dato es 127, para visualizar el tipo de dato<\/strong><br>select * from sys.types where system_type_id = 127<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_02.png\" alt=\"\" class=\"wp-image-1857\" width=\"827\" height=\"164\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_02.png 892w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_02-300x60.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_02-768x152.png 768w\" sizes=\"auto, (max-width: 827px) 100vw, 827px\" \/><\/figure>\n\n\n\n<p><strong>Para obtener el valor inicial de acuerdo al tipo de dato bigint. Tenga en cuenta que al ejecutar la siguiente instrucci\u00f3n, el valor de la secuencia se va incrementando 1.<\/strong><br>select next value for ValoresPorDefecto<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejemplo 2<\/strong><\/p>\n\n\n\n<p><strong>Crear una secuencia llamada EquipoBasket que inicia en 1 y termina en 12.<\/strong><br>Create sequence EquipoBasket<br>As int<br>start with 1 increment by 1<br>minValue 1<br>maxvalue 12<br>Cycle<br>go<br>Visualizar los valores, ejecute mas de 12 veces la siguiente instrucci\u00f3n. Note que al llegar al valor m\u00e1ximo se reinicia en el valor m\u00ednimo por la especificaci\u00f3n de la cl\u00e1usula Cycle.<\/p>\n\n\n\n<p><strong>select next value for EquipoBasket<\/strong><br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Eliminar la secuencia<\/strong><\/p>\n\n\n\n<p>Drop sequence EquipoBasket<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejemplo 3<\/strong><\/p>\n\n\n\n<p><strong>Crear una secuencia que permita especificar el c\u00f3digo para los departamentos en una empresa.<br><\/strong>Create sequence SecuenciaDepartamentos<br>As tinyint<br>Start With 1<br>INCREMENT By 1<br>go<br><strong>Crear la tabla de Departamentos<\/strong><br>Create Table Departamentos<br>(<br>DepartamentosCodigo tinyint,<br>DepartamentosDescripcion nvarchar(150),<br>constraint DepartamentosPK Primary key (DepartamentosCodigo)<br>)<br>go<\/p>\n\n\n\n<p><strong>Usar la secuencia para obtener el valor para el c\u00f3digo usando NEXT VALUE FOR\u2026<br>Insertar Departamentos<\/strong><br>Insert into Departamentos (DepartamentosCodigo,DepartamentosDescripcion)<br>values (<strong>Next value FOR SecuenciaDepartamentos<\/strong>, &#8216;Gerencia General&#8217;)<br>go<br>Insert into Departamentos (DepartamentosCodigo,DepartamentosDescripcion)<br>values (<strong>Next value FOR SecuenciaDepartamentos<\/strong>, &#8216;Producci\u00f3n&#8217;)<br>go<br>Insert into Departamentos (DepartamentosCodigo,DepartamentosDescripcion)<br>values (<strong>Next value FOR SecuenciaDepartamentos<\/strong>, &#8216;Contabilidad&#8217;)<br>go<br>Consultar la tabla<br>Select * from Departamentos<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_03.png\" alt=\"\" class=\"wp-image-1858\" width=\"762\" height=\"236\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_03.png 586w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_03-300x93.png 300w\" sizes=\"auto, (max-width: 762px) 100vw, 762px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejemplo 4<\/strong><\/p>\n\n\n\n<p><strong>Ver las secuencias creadas en la base de datos<\/strong><br>select * from sys.sequences<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Modificaci\u00f3n de una Secuencia<\/strong><\/p>\n\n\n\n<p><strong>Instrucci\u00f3n Alter Sequence<\/strong><br>Modifica los argumentos de una secuencia existente.<br><strong>Importante: para cambiar el tipo de dato num\u00e9rico de la secuencia, esta se debe eliminar y luego volver a crear con el nuevo tipo.<br><\/strong>Sintaxis:<br>ALTER SEQUENCE [Esquema. ] NombreDeSecuencia<br>[ RESTART [ WITH ] ]<br>[ INCREMENT BY ]<br>[ { MINVALUE } | { NO MINVALUE } ]<br>[ { MAXVALUE } | { NO MAXVALUE } ]<br>[ CYCLE | { NO CYCLE } ]<br><strong>Donde:<\/strong><br><strong>NombreDeSecuencia<\/strong>: es el nombre de la secuencia a modificar.<br><strong>Restart With<\/strong>: define el valor en el que reiniciar\u00e1 la secuencia.<br><strong>Increment by<\/strong>: Define el incremento o decremento.<br><strong>MinValue<\/strong>: Especifica el valor m\u00ednimo, por defecto es CERO para el tipo tinyint y un valor negativo para el resto de tipos.<br><strong>MaxValue<\/strong>: Especifica el valor m\u00e1ximo. El valor por defecto est\u00e1 definido de acuerdo al valor m\u00e1ximo del tipo de dato entero. (Ver tabla arriba)<br><strong>Cycle<\/strong>: Permite que la secuencia se reinice cuando llega a su valor m\u00ednimo o m\u00e1ximo, dependiendo si es ascendente o descendente.<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejemplo 5<\/strong><\/p>\n\n\n\n<p><strong>Crear una secuencia con valores por defecto y luego modificarla para que su valor inicial sea 10 y se incremente de 5 en 5<br><\/strong>Create sequence PruebaCambio<br>go<br>Alter sequence PruebaCambio<br>restart with 10<br>increment by 5<br>go<br><\/p>\n\n\n\n<p>Visualizar los valores de la secuencia<br>Select name, start_value, increment, maximum_value, minimum_value,<br>is_cycling, type, system_type_id, current_value<br>from sys.sequences where name = &#8216;PruebaCambio&#8217;<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_04-1024x99.png\" alt=\"\" class=\"wp-image-1859\" width=\"880\" height=\"85\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_04-1024x99.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_04-300x29.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_04-768x74.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_Secuencias_04.png 1286w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Eliminar un secuencia<\/strong><\/p>\n\n\n\n<p><strong>Instrucci\u00f3n Drop Sequence<\/strong><br>Elimina una secuencia de la base de datos<br>Sintaxis:<br>Drop sequence [Esquema.]NombreSecuencia<br><strong>Donde:<\/strong><br><strong>Esquema<\/strong>: es el nombre del esquema donde se encuentra la secuencia. (Ver esquemas)<br><strong>NombreSecuencia<\/strong>: nombre de la secuencia a eliminar.<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejemplo 6<\/strong><\/p>\n\n\n\n<p><strong>Eliminar la secuencia PruebaCambio<\/strong><br>Drop sequence PruebaCambio<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Secuencias en SQL Server Se puede definir una secuencia como un conjunto de valores que parten de un valor inicial, tienen un incremento o decremento, lo que significa que la secuencia puede ser ascendente o descendente y pueden tener un valor final. Adem\u00e1s se poder crear secuencias c\u00edclicas, es decir, secuencias que al llegar a &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1853\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1855,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[199,198],"class_list":["post-1853","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-registros-vistas","tag-crear-secuencia","tag-create-sequence","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1853","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1853"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1853\/revisions"}],"predecessor-version":[{"id":1860,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1853\/revisions\/1860"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1855"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1853"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1853"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1853"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}