SQL Server - trigger insert

 
Vista:

trigger insert

Publicado por Ricardo (4 intervenciones) el 15/11/2011 01:01:26
mi problema es el siguiente:

tengo una tabla llamada seg_tabla en la cual tengo dos columnas en una el nombre de la tabla y otro campo con la llave primaria que continua.

ahora bien necesito ingresar en la tabla tbarticulo un nuevo articulo,
en teoria debo de ir a leer la tabla seg_tabla encontrar el registro para tbarticulo y con ese valor es la llave primaria de mi nuevo registro, luego le realizo update a seg_tabla para aumentarle 1.

tengo el problema que no se como hacer la modificacion de la tabla inserted de los datos

CREATE TRIGGER [TRCLASEARTICULO]
ON [TBCLASEARTICULO]
FOR INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

declare
@seq_val INT;
select @seq_val = SEG_SECUENCIA from SEG_TABLAS where SEG_TABLAS.SEG_TABLA = 'TBCLASEARTICULO' ;
update inserted set CLASEARTICULO = @seq_val ;
update SEG_TABLAS set SEG_SECUENCIA= @seq_val + 1 where SEG_TABLAS.SEG_TABLA = 'TBCLASEARTICULO';
END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

trigger insert

Publicado por Isaias (4558 intervenciones) el 15/11/2011 21:21:12
No necesitas una tabla alterna para saber que ID sigue en tu tabla, simplemente con hacer un:

SELECT MAX(tucampo) + 1 FROM TuTabla

Obtendras el numero que sigue
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

trigger insert

Publicado por Ricardo (4 intervenciones) el 16/11/2011 01:01:19
Gracias Isaias pero en este caso es necesaria esa tabla de pivotes por algunos requerimientos de auditoria,

ya lo resolvi, es de la siguiente manera: la tabla temporal inserted (solo lectura) contiene los valores que vienen en memoria para ser insertados y la condicion INSTEAD OF INSERT lo que hace es que sustituye el insert estandar de sqlserver por un customizado que uno quiera.

CREATE TRIGGER [dbo].[TRCLASEARTICULO]
ON [dbo].[TBCLASEARTICULO]
INSTEAD OF INSERT
AS
BEGIN

SET NOCOUNT ON;
declare
@seq_val INT;
select @seq_val = SEG_SECUENCIA from SEG_TABLAS where SEG_TABLAS.SEG_TABLA = 'TBCLASEARTICULO' ;
INSERT INTO TBCLASEARTICULO(aca pongo los campos de la TBCLASEARTICULO)
(SELECT @seq_val, y luego los demas campos FROM inserted) ;
update SEG_TABLAS set SEG_SECUENCIA= @seq_val + 1 where SEG_TABLAS.SEG_TABLA = 'TBCLASEARTICULO';

end

espero haberme explicado bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

trigger insert

Publicado por Isaias (4558 intervenciones) el 16/11/2011 20:11:14
Te has explicado perfectamente, solo que los resultados que obtendras en un hambiente multi-usurio seran muy desagradables.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar