SQL Server ha apoyado Objetos de secuencia Desde la creación de SQL Server 2012 y ediciones posteriores. La base de datos Oracle ha admitido objetos SEQUENCE desde el principio. Puede leer la publicación del archivo en Tech-Recipes usando SEQUENCE en Oracle.
Podemos crear un Secuencia en SQL Server para generar valores numéricos secuenciales. De acuerdo a las pautas provistas. Los objetos SEQUENCE se pueden clasificar con una columna IDENTITY en SQL Server, pero a diferencia de las columnas IDENTITY, los objetos SEQUENCE no están vinculados a objetos Table. IDENTITY se considera una propiedad de tabla que se adjunta a las tablas, mientras que los objetos SEQUENCE se crean de forma independiente y se pueden usar con sentencias DML como INSERT y UPDATE o para referir un objeto SEQUENCE por separado. Este tutorial es una guía para principiantes de los objetos SEQUENCE en SQL Server.
Cómo diferenciar entre las propiedades de SECUENCIA e IDENTIDAD
1. Los objetos de secuencia no dependen de las tablas, mientras que las propiedades de identidad están asociadas a las tablas.
2. Los objetos de secuencia se utilizan para generar valores secuenciales en varias tablas con el ámbito de la base de datos. La propiedad Identidad se puede usar para generar números incrementales en el nivel de la tabla.
3. Los objetos de secuencia se introdujeron con una edición de SQL Server 2012, mientras que las propiedades de identidad son compatibles con las ediciones anteriores de SQL Server.
4. Podemos restablecer el número de secuencia actual de un objeto de secuencia y el tamaño de paso incremental. Con IDENTITY, podemos RESEED a un valor específico, pero no podemos cambiar el tamaño del paso incremental.
5. Los objetos de secuencia se pueden almacenar en la memoria caché para mejorar el rendimiento, mientras que los valores de identidad no se pueden almacenar en la memoria caché.
6. Con una secuencia, puede definir el valor Mín / Máx. Con la propiedad Identidad, esto no es compatible.
La sintaxis de los objetos de secuencia
CREAR SECUENCIA [esquema]. [Nombre_de secuencia] [AS ] [COMIENZA CON] [INCREMENTO POR] [MINVALUE | NO MINVALUE] [MAXVALUE | NO MAXVALUE] [CICLO | NO CICLO] [valor CACHE | NO CACHE];
Una secuencia de argumentos del objeto
1. Esquema: Puede definir un nombre de esquema mientras crea objetos de secuencia. Si no se proporciona ningún esquema, dbo el esquema es usado por defecto
2. Nombre de secuencia : Un nombre único que se especificará para identificar el objeto de secuencia
3. Tipo de datos: Los tipos de datos permitidos con objetos de secuencia son TinyInt, SmallInt, Int, Decimal y BIGINT. Si no se proporciona ningún tipo de datos, el tipo de datos BIGINT se utiliza de forma predeterminada.
4. EMPEZAR CON: El primer valor devuelto por el objeto de secuencia
5. INCREMENTO POR: Un valor que se utilizará para incrementar o disminuir (si es negativo) el objeto de secuencia; Este valor no puede ser 0. Si el valor INCREMENT BY es positivo, los objetos de la secuencia son ascendentes. Si es negativo, entonces están descendiendo.
6. MINVALUE - Valor de límite mínimo para una secuencia. Es un parámetro opcional. Si no se define, toma el valor mínimo del rango de tipo de datos definido.
7. VALOR MÁXIMO: Valor de límite máximo para una secuencia. Es un parámetro opcional. Si no se define, toma el valor máximo del rango de tipo de datos definido.
8. Ciclo | El ciclo: Si desea reiniciar el valor de un objeto de secuencia desde un valor mínimo o máximo, parámetro opcional, el valor predeterminado es NOCYCLE.
9. CACHE | NOCHE: Aumente el rendimiento al permitir que la memoria caché reduzca la E / S del disco; el uso de CACHE ayuda a leer el valor actual de la memoria.
Ejemplos: Uso del objeto SEQUENCE con consultas SQL
1. Cree un objeto de secuencia con un nombre de esquema, nombre de secuencia, tipo de datos, comience con y aumente por argumentos.
El siguiente ejemplo creará un objeto de secuencia llamado "UniqueSequenceObject". Empezará desde 1, y el valor se incrementa en 1 cada vez que usamos "UniqueSequenceObject".
IF EXISTS (SELECCIONAR nombre DE Sys.sequences DONDE nombre = 'UniqueSequenceObject') DROP SEQUENCE UniqueSequenceObject GO CREAR SECUENCIA dbo.UniqueSequenceObject COMO INT COMENZAR CON 1 INCREMENTO POR 1 NINGÚN MINVALO SIN MAXIMO NINGÚN CICLO NO CACHO IR
2. Cómo obtener el primer valor utilizando un objeto de secuencia
La siguiente declaración devolverá el valor "1" para obtener el primer valor usando "UniqueSequenceObject".
SELECCIONE el valor = SIGUIENTE VALOR PARA dbo.UniqueSequenceObject;
Valor de salida ------- 1
3. Almacenar un valor de objeto de secuencia en una variable
La siguiente declaración declarará una variable y almacenará el siguiente valor de secuencia (es decir, "2") en la variable @SequenceValue.
DECLARAR @SequenceValue como INT; SET @SequenceValue = VALOR SIGUIENTE PARA dbo. UniqueSequenceObject; SELECCIONE @SequenceValue como SequenceValue;
Salida SequenceValue -------------------- 2
4. Visualización de las propiedades de un objeto de secuencia utilizando la vista del sistema
La siguiente consulta utiliza la vista del sistema. sys.sequence para proporcionar más información sobre la secuencia de objetos "UniqueSequenceObject". Nos muestra un valor de inicio, un valor mínimo / máximo y un valor actual.
seleccione nombre, tipo_desc, valor_inicial, incremento, valor mínimo, valor_valor, valor_actual de sys. secuencias donde nombre = 'UniqueSequenceObject';
La siguiente tabla muestra el valor de inicio e incremento como "1". Definimos estos valores al crear un objeto de secuencia. También muestra un valor mínimo / máximo que son valores límite del tipo de datos Integer. También muestra un valor actual "2" que usamos en el Ejemplo 3 para almacenarlo en una variable.
5. Creación de un objeto de secuencia con un límite de valor mínimo / máximo
La siguiente consulta crea un objeto de secuencia. "TestSequenceObject". Comienza con 100 y se incrementa en 10 con el valor mínimo "100" y el valor máximo "150".
CREAR SECUENCIA dbo.TestSequenceObject COMO INT COMENZAR CON 100 INCREMENTOS POR 10 MINVALUE 100 MAXVALUE 150 NO CACHE NO CYCLE GO
Recuperemos un valor de inicio utilizando "TestSequenceObject".
DECLARAR @SequenceValue asINT; SET @SequenceValue = VALOR SIGUIENTE PARA dbo.TestSequenceObject; SELECCIONE @SequenceValue como SequenceValue;
Salida ------------- SequenceValue 100
Al ejecutar la consulta a continuación, vamos a exceder el valor límite máximo definido para el objeto de secuencia. Se generará un error que indica que hemos cruzado el valor del límite para el objeto de secuencia definido. Usando una instrucción GO, podemos ejecutar la consulta debajo de "5" veces.
SELECCIONE EL SIGUIENTE VALOR PARA dbo.TestSequenceObject GO 5
Obtenemos el siguiente error una vez que el valor actual alcanza el valor límite máximo "150".
Msg 11728, Nivel 16, Estado 1, Línea 16
El objeto de secuencia 'TestSequenceObject' ha alcanzado su valor mínimo o máximo. Reinicie el objeto de secuencia para permitir que se generen nuevos valores.
** Se encontró un error durante la ejecución del lote. Continuo.
Ejecución por lotes completada 5 veces.
6. Creando un objeto de secuencia con la propiedad CYCLE
En el Ejemplo 5, no habilitamos la propiedad CICLO del objeto de secuencia. Usando esta propiedad, podemos reiniciar el objeto de la Secuencia desde su valor mínimo para evitar lanzar el error anterior.
Vamos a crear de nuevo un objeto de secuencia con la propiedad CICLO y comprobar si falla cuando alcanza el límite máximo. Una vez que la secuencia alcanza el valor límite máximo, comenzará nuevamente desde su valor mínimo definido.
SI EXISTE (SELECCIONE el nombre DE Sys.sequences DÓNDE nombre = 'TestSequenceObject') DROP SEQUENCE TestSequenceObject CREAR SECUENCIA dbo.TestSequenceObject COMO INT. COMENZAR CON INSPECTIVO. 10
7. Usando un objeto de secuencia con una instrucción INSERT
SI OBJECT_ID ('Empleado', 'U') NO ES UNA TABLA DE GOTA NULA Empleado; CREAR TABLA Empleado (EmployeeId INT, Nombre VARCHAR (100));
Insertar pocos registros en la tabla Empleado utilizando el objeto de secuencia
INSERT INTO Valores de empleado (EmployeeId, Name) (siguiente valor para dbo.TestSequenceObject, 'Vishwanath'); INSERT INTO Valores de empleado (EmployeeId, Name) (siguiente valor para dbo.TestSequenceObject, 'Dalvi'); SELECCIONAR * DEL EMPLEADO;
Salida EmployeeId Name ----------- ------------------- 1 Vishwanath 2 Dalvi
Lea más sobre la base de datos y la programación SQL publicada en Tech-Recipes.