Inicio > Curso básico de SQL Server 2008 > Numeración con identity, numeración con bloqueos – Sql Server 2008

Numeración con identity, numeración con bloqueos – Sql Server 2008


——————————————————————–
—- Numeración con identity
——————————————————————–

— Utilizamos la DB creada pruebas

USE Pruebas
GO

CREATE TABLE Pedidos (ID INT IDENTITY, FECHA DATETIME NOT NULL, CLIENTE VARCHAR(100) NOT NULL)
GO

— Insertamos el primer pedido
INSERT INTO Pedidos (FECHA,CLIENTE) VALUES (GETDATE(),’SERVICIOS EFICACES’)
SELECT * FROM Pedidos

— Insetamos el segundo pedido
INSERT INTO Pedidos (FECHA,CLIENTE) VALUES (GETDATE(),NULL)
SELECT * FROM Pedidos — Error no se genero el registro

— Isertamos el tercer registro
INSERT INTO Pedidos (FECHA,CLIENTE) VALUES (GETDATE(),’TOTAL SERVICIOS’)
SELECT * FROM Pedidos — Se genero el tercer pedido y hay huecos

——————————————————————–
— Numeración con bloqueos
——————————————————————–
— En este ejemplo se muestra como el IDENTITY sigue incrmentando aunque
— utilizemos Transaccion

CREATE TABLE TransaccionDetalle (VALOR INT IDENTITY, NOMBRE CHAR(400))
GO

DECLARE @Contador INT
SET @Contador = 0
WHILE @Contador < 2000
 BEGIN
   INSERT INTO TransaccionDetalle VALUES (@Contador + 100)
   SET @Contador = @Contador + 1
 END

BEGIN TRAN
  INSERT INTO
  TransaccionDetalle (NOMBRE) VALUES (‘VICTOR’)
ROLLBACK TRAN
 
SELECT SCOPE_IDENTITY()
SELECT * FROM TransaccionDetalle

TRUNCATE TABLE TransaccionDetalle
DROP TABLE TransaccionDetalle

— Ejemplo utilizando un SP , para la generación del ID del Pedido

CREATE TABLE Numerador (TIPO VARCHAR(100),IDUnico INT)
GO

INSERT INTO Numerador VALUES (‘Pedidos’,0)
GO

DROP TABLE Pedidos
GO

CREATE TABLE Pedidos (NUMERO INT, FECHA DATETIME,CLIENTE VARCHAR(100) NOT NULL)
GO

— Creamos el SP para la generación del código unico
CREATE PROCEDURE spGeneraPedido @CLIENTE VARCHAR(100)
AS
DECLARE
@proximo_numero INT
BEGIN TRY
 BEGIN TRANSACTION

  UPDATE Numerador SET @proximo_numero = IDUnico = IDUnico + 1
  WHERE TIPO = ‘Pedidos’
 INSERT INTO dbo.Pedidos VALUES (@proximo_numero,getdate(),@CLIENTE)
 COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION 
  PRINT
@@error   — se muestra el error generado
END CATCH
GO

— Insertamos el primer valor
EXEC spGeneraPedido ‘SERVICIO EFICACES’
SELECT * FROM Pedidos — mostramos el resultado

— Insertamos el segundo valor, hacemos que falle
EXEC spGeneraPedido NULL
SELECT * FROM Pedidos — mostramos el resultado

— Insertamos el tercer valor
EXEC spGeneraPedido ‘TOTAL SERVICIOS’
SELECT * FROM Pedidos — mostramos el resultado

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: