SQL ServerVideos
473
0

Cómo insertar registros en nuestras tablas sin saltos

En este tutorial paso a paso te muestro como podes hacer insert en tus tablas cuando necesitas que los números (por ejemplo un ID) deban ser secuenciales y además evitar saltos en sus datos.

Código utilizado en el video

/*
NUMERAR REGISTROS SIN DUPLICADOS Y SALTOS
*/
-- EJEMPLO 1 (USO DE IDENTITY)
USE master 
GO
DROP DATABASE IF EXISTS  DEMO_NUMERADOR
GO
CREATE DATABASE DEMO_NUMERADOR
GO
USE DEMO_NUMERADOR
GO
CREATE TABLE TEST1 (ID INT IDENTITY(1,1) PRIMARY KEY,
                    C1 INT,
					C2 DATE)
-- INSERT OK
INSERT INTO TEST1 (C1,C2)
VALUES (1,GETDATE())
SELECT * FROM TEST1
-- INSERT NO OK
INSERT INTO TEST1 (C1,C2)
VALUES ('H',GETDATE())
-- INSERT OK
INSERT INTO TEST1 (C1,C2)
VALUES (2,GETDATE())
SELECT * FROM TEST1
DROP TABLE TEST1 
------------------------------------------
---- EJEMPLO 2 CON TABLA -----------------
------------------------------------------
DROP TABLE IF EXISTS NUMERADOR
CREATE TABLE NUMERADOR (TABLA VARCHAR(255),
                        ULTIMO_NUMERO INT)
INSERT INTO NUMERADOR VALUES ('TEST1',0)
CREATE TABLE TEST1 (ID INT  PRIMARY KEY,
                    C1 INT,
					C2 DATE)
-- PROCESO CON UPDATE 
DECLARE @NRO INT
BEGIN TRAN
 UPDATE NUMERADOR SET
 @NRO = ULTIMO_NUMERO = ULTIMO_NUMERO+1 
 WHERE  TABLA = 'TEST1'
 INSERT INTO TEST1 (ID,C1,C2)
 VALUES (@NRO,1,GETDATE())
COMMIT TRAN
GO 3
SELECT * FROM NUMERADOR
SELECT * FROM TEST1 
-- HACEMOS FALLAR
DECLARE @NRO INT
BEGIN TRAN
 UPDATE NUMERADOR SET
 @NRO = ULTIMO_NUMERO = ULTIMO_NUMERO+1 
 WHERE  TABLA = 'TEST1'
 INSERT INTO TEST1 (ID,C1,C2)
 VALUES (@NRO,'H',GETDATE())
COMMIT TRAN
-- VOLVEMOS A INSERTAR UNO NUEVO
DECLARE @NRO INT
BEGIN TRAN
 UPDATE NUMERADOR SET
 @NRO = ULTIMO_NUMERO = ULTIMO_NUMERO+1 
 WHERE  TABLA = 'TEST1'
 INSERT INTO TEST1 (ID,C1,C2)
 VALUES (@NRO,1,GETDATE())
COMMIT TRAN
SELECT * FROM NUMERADOR
SELECT * FROM TEST1 
--- PROBAMOS CONCURRENCIA (SESION 1)
DECLARE @NRO INT
BEGIN TRAN
 UPDATE NUMERADOR SET
 @NRO = ULTIMO_NUMERO = ULTIMO_NUMERO+1 
 WHERE  TABLA = 'TEST1'
 INSERT INTO TEST1 (ID,C1,C2)
 VALUES (@NRO,1,GETDATE())
 -- ROLLBACK TRAN
 -- COMMIT TRAN
--- PROBAMOS CONCURRENCIA (SESION 2)
USE DEMO_NUMERADOR 
GO
DECLARE @NRO INT
BEGIN TRAN
 UPDATE NUMERADOR SET
 @NRO = ULTIMO_NUMERO = ULTIMO_NUMERO+1 
 WHERE  TABLA = 'TEST1'
 INSERT INTO TEST1 (ID,C1,C2)
 VALUES (@NRO,1,GETDATE())
COMMIT TRAN
-- VEMOS VALORES
SELECT * FROM TEST1 
SELECT * FROM NUMERADOR 
You must be logged in to post a comment.