MANEJO DE SECUENCIAS

14/05/2008 - 18:33 por Miguel Acevedo | Informe spam
Hola, estoy investigando cual es la mejor opcion para el manejo de secuencias
en SQL Server, hasta ahora tengo varias opciones las cuales estoy probando
algunas de ellas con campos identity o otras no, si me pueden ayudar con su
experiencia y recomendarle cual es la mejor opcion les agradeceria mucho.

Nota: Lo que quiero hacer es manejar los campos clave de las tablas.

Gracias

Miguel Acevedo

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
14/05/2008 - 22:22 | Informe spam
Estaría bueno que usted explicara con más detalle lo que necesita si es que
desea muchas opiniones.

Si es autonumerar una columna, el tipo IDENTITY parece ser lo que necesita.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Miguel Acevedo" wrote:

Hola, estoy investigando cual es la mejor opcion para el manejo de secuencias
en SQL Server, hasta ahora tengo varias opciones las cuales estoy probando
algunas de ellas con campos identity o otras no, si me pueden ayudar con su
experiencia y recomendarle cual es la mejor opcion les agradeceria mucho.

Nota: Lo que quiero hacer es manejar los campos clave de las tablas.

Gracias

Miguel Acevedo
Respuesta Responder a este mensaje
#2 Miguel Acevedo
15/05/2008 - 04:26 | Informe spam
Gracias por la sugerencia, esta son algunas de las opciones que estoy
manejando, disculpa que te las coloque aqui pero es que no vi otra forma de
hacertelo llegar.

Gracias de antemano por la colaboracion que quieras prestarme.

A otra cosita lo que quiero hacer es un manejo efectivo de los id en varias
tablas, porque actualmente para insertar estan usando un select variable =
max(codigo) from tabla, y con esta variable insertan el nuevo registro, esto
en tables grandes ya esta dando problemas de respuesta y tambien esta
repitiendo algunas veces los codigos y por esto genera error ya que el codigo
es clave primaria.

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[MANUAL]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[MANUAL]
GO

CREATE TABLE [dbo].[MANUAL] (
[CODIGO] [numeric](18, 0) NOT NULL ,
[DESCRIPCION] [varchar] (50) NULL ,
[USUARIO] [varchar] (50) NULL
) ON [PRIMARY]
GO

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[DIRECTO]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[DIRECTO]
GO

CREATE TABLE [dbo].[DIRECTO] (
[SSN] [numeric](18, 0) NOT NULL
) ON [PRIMARY]
GO

INSERT INTO DIRECTO VALUES(0)
GO

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[AUTOMATICO]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AUTOMATICO]
GO

CREATE TABLE [dbo].[AUTOMATICO] (
[CODIGO] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
[DESCRIPCION] [varchar] (50) NULL ,
[USUARIO] [varchar] (50) NULL
) ON [PRIMARY]
GO

DROP TABLE PASES_MOD1
GO

DROP TABLE SECUENCIAS_MOD1
GO

DROP PROCEDURE P_INS_SECUENCIA_MOD1
GO

DROP PROCEDURE P_BUS_SECUENCIA_MOD1
GO

CREATE TABLE PASES_MOD1 (
CODIGO INT PRIMARY KEY,
DESCRIPCION VARCHAR(50)
)
GO

CREATE TABLE SECUENCIAS_MOD1 (
NOMBRE VARCHAR(255) PRIMARY KEY, -- NOMBRE DE LA SECUENCIA
INICIO INT NOT NULL DEFAULT(1), -- VALOR PARA INICIO DE SECUENCIA
INCREMENTO INT NOT NULL DEFAULT(1), -- TIPO DE INCREMENTO
VALOR_ACTUAL INT -- VALOR ACTUAL DE LA SECUENCIA
)
GO

CREATE PROCEDURE P_INS_SECUENCIA_MOD1
@NOMBRE VARCHAR(255),
@INICIO INT = NULL,
@INCREMENTO INT = NULL
AS
BEGIN
DECLARE @VALOR_ACTUAL INT

if exists (
select 1 from SECUENCIAS_MOD1
where NOMBRE = @NOMBRE )
begin
print 'Sequence already exists.'
return 1
end

if @INICIO is null set @INICIO = 0

if @INCREMENTO is null set @INCREMENTO = 1

set @VALOR_ACTUAL = @INICIO

insert into SECUENCIAS_MOD1 (NOMBRE, INICIO, INCREMENTO, VALOR_ACTUAL)
values (@NOMBRE, @INICIO, @INCREMENTO, @VALOR_ACTUAL)
end
GO

create procedure P_BUS_SECUENCIA_MOD1
@NOMBRE VARCHAR(255)
as
begin
declare @NUEVO_VALOR int

SET NOCOUNT ON

update SECUENCIAS_MOD1
set @NUEVO_VALOR = VALOR_ACTUAL = VALOR_ACTUAL + INCREMENTO

where NOMBRE = @NOMBRE

if @@rowcount = 0
begin
print 'Sequence does not exist'
return
end

return @NUEVO_VALOR

SET NOCOUNT OFF

end
GO

P_INS_SECUENCIA_MOD1 'PASE_BOVEDA'
GO

/*
Declare @NUEVO_VALOR int
Execute @NUEVO_VALOR = P_BUS_SECUENCIA_MOD1 @NOMBRE = 'PASE_BOVEDA'
print @NUEVO_VALOR
*/

DROP TABLE PASES_MOD2
GO

DROP TABLE SECUENCIA_MOD2
GO

DROP PROCEDURE P_BUS_SECUENCIA_MOD2
GO

CREATE TABLE PASES_MOD2 (
CODIGO INT PRIMARY KEY,
DESCRIPCION VARCHAR(50)
)
GO

create table SECUENCIA_MOD2 (
VALOR int identity(1,1) primary key,
AUX varchar(1)
)
GO

create procedure P_BUS_SECUENCIA_MOD2
as
begin
declare @NUEVO_VALOR int
set NOCOUNT ON
insert into SECUENCIA_MOD2 (AUX) values ('a')
set @NUEVO_VALOR = scope_identity()
delete from SECUENCIA_MOD2
return @NUEVO_VALOR
set NOCOUNT OFF
end
GO

/*
Declare @NUEVO_VALOR int
Exec @NUEVO_VALOR = P_BUS_SECUENCIA_MOD2
PRINT @NUEVO_VALOR
*/

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[P_INS_DIRECTO]') and OBJECTPROPERTY(id, N'IsProcedure') =
1)
drop procedure [dbo].[P_INS_DIRECTO]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE P_INS_DIRECTO AS

INSERT INTO AUTOMATICO(DESCRIPCION, USUARIO) VALUES('DESCRIPCION','UNO')
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[P_DIRECTO_DOS]') and OBJECTPROPERTY(id, N'IsProcedure') =
1)
drop procedure [dbo].[P_DIRECTO_DOS]
GO

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[P_DIRECTO_UNO]') and OBJECTPROPERTY(id, N'IsProcedure') =
1)
drop procedure [dbo].[P_DIRECTO_UNO]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE P_DIRECTO_DOS AS

DECLARE @CONT INT
DECLARE @Numero2 INT

SET @CONT = 1

SET NOCOUNT ON

WHILE @CONT <= 100
BEGIN
SET @Numero2 = 0

BEGIN TRANSACTION
UPDATE DIRECTO SET SSN = @CONT
SELECT @Numero2 = SSN FROM DIRECTO
PRINT @Numero2
COMMIT TRAN

SET @CONT = @CONT + 1
END

SET NOCOUNT OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE P_DIRECTO_UNO AS

DECLARE @CONT INT
DECLARE @Numero2 INT

SET @CONT = 1

SET NOCOUNT ON

BEGIN TRANSACTION
UPDATE DIRECTO SET SSN = 10
COMMIT TRAN

WHILE @CONT <= 1000
BEGIN
SET @Numero2 = 0

BEGIN TRANSACTION
UPDATE DIRECTO SET SSN = SSN + 1
SELECT @Numero2 = SSN FROM DIRECTO
PRINT @Numero2
COMMIT TRAN

SET @CONT = @CONT + 1
END

SET NOCOUNT OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO



"Gux (MVP)" wrote:

Estaría bueno que usted explicara con más detalle lo que necesita si es que
desea muchas opiniones.

Si es autonumerar una columna, el tipo IDENTITY parece ser lo que necesita.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Miguel Acevedo" wrote:

> Hola, estoy investigando cual es la mejor opcion para el manejo de secuencias
> en SQL Server, hasta ahora tengo varias opciones las cuales estoy probando
> algunas de ellas con campos identity o otras no, si me pueden ayudar con su
> experiencia y recomendarle cual es la mejor opcion les agradeceria mucho.
>
> Nota: Lo que quiero hacer es manejar los campos clave de las tablas.
>
> Gracias
>
> Miguel Acevedo
Respuesta Responder a este mensaje
#3 Miguel Acevedo
15/05/2008 - 23:55 | Informe spam
Hola buenas tardes, ya en el mensaje anterior agregue las opciones que estoy
manejando, por favor recomiendenme algo ya que mañana debo presentar una
propuesta concreta y me falta escojer cual es la mejor opcion.

Miguel Acevedo.

"Gux (MVP)" wrote:

Estaría bueno que usted explicara con más detalle lo que necesita si es que
desea muchas opiniones.

Si es autonumerar una columna, el tipo IDENTITY parece ser lo que necesita.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Miguel Acevedo" wrote:

> Hola, estoy investigando cual es la mejor opcion para el manejo de secuencias
> en SQL Server, hasta ahora tengo varias opciones las cuales estoy probando
> algunas de ellas con campos identity o otras no, si me pueden ayudar con su
> experiencia y recomendarle cual es la mejor opcion les agradeceria mucho.
>
> Nota: Lo que quiero hacer es manejar los campos clave de las tablas.
>
> Gracias
>
> Miguel Acevedo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida