trigger en tabla, para realizarse en forma masiva

14/09/2009 - 22:37 por Excequiel A. | Informe spam
Buenas Tardes.
Tengo una base de datos en SQLServer 2000 la cual tiene una tabla con un
trigger en update, el problema es que el trigger no se ejecute en forma
masiva, debo ir uno a uno para que el trigger se ejecute. Pero lo que
necesito es hacer un update por el administrador de consultas de sqlserver y
que el trigger se ejecute para cada una de las actualizaciones que estoy
haciendo en forma masiva.
No es un problema de construcción del trigger porque funciona pero uno a
uno por el administrador cambiando directamente el dato en la celda.

Esperando una buena acogida

Atentamente a uds.

Excequiel.

Preguntas similare

Leer las respuestas

#1 Ruben Garrigos
14/09/2009 - 23:49 | Informe spam
Hola Excequiel A.,

Posiblemente el código de tu trigger esté incorrecto. ¿Podrías publicar el
script de tu tabla y de tu trigger?

Un saludo,

Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba

Buenas Tardes.
Tengo una base de datos en SQLServer 2000 la cual tiene una tabla
con un
trigger en update, el problema es que el trigger no se ejecute en
forma
masiva, debo ir uno a uno para que el trigger se ejecute. Pero lo que
necesito es hacer un update por el administrador de consultas de
sqlserver y
que el trigger se ejecute para cada una de las actualizaciones que
estoy
haciendo en forma masiva.
No es un problema de construcción del trigger porque funciona pero
uno a
uno por el administrador cambiando directamente el dato en la celda.
Esperando una buena acogida

Atentamente a uds.

Excequiel.

Respuesta Responder a este mensaje
#2 Excequiel A.
15/09/2009 - 17:39 | Informe spam
Este SQL server está en una máquina virtual Vmware con windows server 2008
con 8Gz en ram.
Este es el Script del Trigger, el cual está entero. La actualización la
realize en sql 2005 y 2000, es más como sólo necesitaba la parte de if
update(SG_TipoSemilla) entonces saqué el otro if. Después como no obtenía
resultados, me di por vencido y empezé a probar uno a uno en el
administrador y pude ver que si se actualizaban las demas tablas. En la
tabla SAG siempre se actualizó la celda SG_TipoSemilla perfectamente todas
las veces que ejecuté la instrucción masiva y colocando cualquier valor.
set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

ALTER TRIGGER [EnUpdateSag] ON [dbo].[SAG]

FOR UPDATE

AS

declare

@SG_CodSag int,

@SG_CodSag2 int,

@SG_NumControl varchar(15),

@SG_CodVariedad int,

@SG_CodVariedad2 int,

@SG_RutAgricultor varchar(10),

@SG_CodParcela int,

@SG_FechaControl datetime,

@SG_Periodo char(9),

@SG_CodUsuario int,

@SG_Correlativo char(5),

@SG_SufijoAno char(2),

@SG_SufijoEspecie char(3),

@SG_SufijoTipoSemilla char(2),

@SG_SufijoRegion char(2),

@SG_PrefijoRch char(3),

@SG_CodCliente int,

@SG_Transaccion datetime,

@SG_TipoSemilla int,

@SG_TipoTransaccion char(1)

select @SG_CodSag2= del.SG_CodSag,

@SG_CodVariedad2= del.SG_CodVariedad

from deleted del

select @SG_CodSag= ins.SG_CodSag,

@SG_NumControl= ins.SG_NumControl,

@SG_CodVariedad= ins.SG_CodVariedad,

@SG_RutAgricultor= ins.SG_RutAgricultor,

@SG_CodParcela= ins.SG_CodParcela,

@SG_FechaControl= ins.SG_FechaControl,

@SG_Periodo= ins.SG_Periodo,

@SG_CodUsuario= ins.SG_CodUsuario,

@SG_Correlativo= ins.SG_Correlativo,

@SG_SufijoAno= ins.SG_SufijoAno,

@SG_SufijoEspecie= ins.SG_SufijoEspecie,

@SG_SufijoTipoSemilla= ins.SG_SufijoTipoSemilla,

@SG_SufijoRegion= ins.SG_SufijoRegion,

@SG_PrefijoRch= ins.SG_PrefijoRch,

@SG_TipoSemilla=ins.SG_TipoSemilla,

@SG_CodCliente= ins.SG_CodCliente

from Inserted ins

set @SG_Transaccion= getdate()

set @SG_TipoTransaccion= 'M'

//******** este if se puede sacar, no interesa por el momento********//

if update(SG_CodVariedad)

begin

begin transaction

update DetalleGuiaDespacho

set

DD_CodVariedad = @SG_Codvariedad

where (DD_codsag =@sg_Codsag) and ( DD_CodVariedad = @SG_Codvariedad2)

update Laboratorio

set

LB_CodVariedad = @SG_Codvariedad

where (Lb_codsag =@sg_Codsag) and (LB_CodVariedad = @SG_Codvariedad2)

update LaboratorioHis

set

LBH_CodVariedad = @SG_Codvariedad

where (Lbh_codsag =@sg_Codsag) and ( LBH_CodVariedad = @SG_Codvariedad2)

update Desgrane

set

Ds_Variedad = @SG_Codvariedad

where (ds_codsag =@sg_Codsag) and ( Ds_Variedad = @SG_Codvariedad2)

update mazorcas

set

MZ_Variedad = @SG_Codvariedad

where (MZ_Codsag =@SG_Codsag) and ( MZ_Variedad = @SG_Codvariedad2)

update Ubicaciones

set

UB_Variedad = @SG_Codvariedad

where (UB_Codsag =@SG_Codsag) and ( UB_Variedad = @SG_Codvariedad2)

update Bodega

set

BD_Variedad = @SG_Codvariedad

where (BD_Codsag =@SG_Codsag) and (BD_Variedad = @SG_Codvariedad2)

update calibracion

set

cn_variedad = @sg_codvariedad

where (cn_codsag=@sg_CodSag) and (cn_variedad = @sg_codvariedad2)

update DetalleDesgrane

set

dtd_codvariedad = @sg_codvariedad

where (dtd_codsag=@SG_PrefijoRch) and (dtd_codvariedad = @sg_codvariedad2)

commit transaction

end

//******** hasta acá es el if que se puede sacar, no interesa por el
momento********//

if update(SG_tiposemilla)

begin

begin transaction

update DetalleGuiaDespacho

set

DD_CodTpoSem = @SG_tiposemilla

where (DD_codsag =@sg_Codsag)

update Laboratorio

set

Lb_TpoSemilla = @SG_tiposemilla

where (Lb_codsag =@sg_Codsag)

update LaboratorioHis

set

Lbh_TpoSemilla = @SG_tiposemilla

where (Lbh_codsag =@sg_Codsag)

update Desgrane

set

DS_TipoSemilla = @SG_tiposemilla

where (ds_codsag =@sg_Codsag)

update Bodega

set

BD_CodSemilla=@SG_tiposemilla,

BD_TipoSemilla = @SG_tiposemilla

where (BD_Codsag =@SG_Codsag)

update calibracion

set

CN_TipoSemilla = @SG_tiposemilla

where (cn_codsag=@sg_CodSag)

update GuiaDetalleDevolucion

set

DG_TpoSem = @SG_tiposemilla

where (dg_codsag=@sg_CodSag)

update DevolucionBasicaS

set

Dev_TipoSemilla = @SG_tiposemilla

where (dev_codsag=@sg_CodSag)

commit transaction

end

insert into mov_sag

(SG_CodSag,

SG_NumControl,

SG_CodVariedad,

SG_RutAgricultor,

SG_CodParcela,

SG_FechaControl,

SG_Periodo,

SG_CodUsuario,

SG_Correlativo,

SG_SufijoAno,

SG_SufijoEspecie,

SG_SufijoTipoSemilla,

SG_SufijoRegion,

SG_PrefijoRch,

SG_CodCliente,

SG_Transaccion,

SG_TipoSemilla,

SG_TipoTransaccion)

values(

@SG_CodSag,

@SG_NumControl,

@SG_CodVariedad,

@SG_RutAgricultor,

@SG_CodParcela,

@SG_FechaControl,

@SG_Periodo,

@SG_CodUsuario,

@SG_Correlativo,

@SG_SufijoAno,

@SG_SufijoEspecie,

@SG_SufijoTipoSemilla,

@SG_SufijoRegion,

@SG_PrefijoRch,

@SG_CodCliente,

@SG_Transaccion,

@SG_TipoSemilla,

@SG_TipoTransaccion)



Este es el Update a Realizar masivamente

Update SAG

SET SAG.SG_TipoSemilla = 3

FROM SAG INNER JOIN

CambioTpoSemBorrar ON SAG.SG_numcontrol =
CambioTpoSemBorrar.[N°CTL#]

Esta es la tabla

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[FK_Mazorcas_SAG]') and OBJECTPROPERTY(id,
N'IsForeignKey') = 1)

ALTER TABLE [dbo].[Mazorcas] DROP CONSTRAINT FK_Mazorcas_SAG

GO



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

drop table [dbo].[SAG]

GO



CREATE TABLE [dbo].[SAG] (

[SG_CodSag] [int] IDENTITY (1, 1) NOT NULL ,

[SG_NumControl] [varchar] (40) COLLATE SQL_Latin1_General_CP1_CI_AS
NOT NULL ,

[SG_ControlSem] [varchar] (40) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,

[SG_CodVariedad] [int] NULL ,

[SG_RutAgricultor] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,

[SG_CodParcela] [int] NULL ,

[SG_FechaControl] [datetime] NULL ,

[SG_Periodo] [char] (9) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

[SG_CodUsuario] [int] NULL ,

[SG_Correlativo] [char] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,

[SG_SufijoAno] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

[SG_SufijoEspecie] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,

[SG_SufijoTipoSemilla] [char] (5) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,

[SG_SufijoRegion] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,

[SG_PrefijoRch] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NOT
NULL ,

[SG_CodCliente] [int] NULL ,

[SG_CodPropietario] [int] NULL ,

[SG_Chk] [char] (3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

[SG_Contrato] [varchar] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,

[SG_GMO] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

[SG_Localidad] [int] NULL ,

[SG_Pedegree] [int] NULL ,

[SG_SistCertificacion] [varchar] (20) COLLATE
SQL_Latin1_General_CP1_CI_AS NULL ,

[SG_TipoSemilla] [int] NULL ,

[SG_CodEvento] [int] NULL ,

[SG_CodResol] [int] NULL ,

[SG_RegistroCampo] [varchar] (70) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,

[SG_Ha] [float] NULL ,

[SG_BagType] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,

[SG_Palette] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,

[SG_PlanMuestra] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS
NULL ,

[SG_KgMuestra] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

[SG_Zona] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NULL

) ON [PRIMARY]

GO



Esperando una buena acogida Atentamente a ustedes



Excequiel.





"Ruben Garrigos" escribió en el mensaje
news:
Hola Excequiel A.,

Posiblemente el código de tu trigger esté incorrecto. ¿Podrías publicar el
script de tu tabla y de tu trigger?

Un saludo,

Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba

Buenas Tardes.
Tengo una base de datos en SQLServer 2000 la cual tiene una tabla
con un
trigger en update, el problema es que el trigger no se ejecute en
forma
masiva, debo ir uno a uno para que el trigger se ejecute. Pero lo que
necesito es hacer un update por el administrador de consultas de
sqlserver y
que el trigger se ejecute para cada una de las actualizaciones que
estoy
haciendo en forma masiva.
No es un problema de construcción del trigger porque funciona pero
uno a
uno por el administrador cambiando directamente el dato en la celda.
Esperando una buena acogida

Atentamente a uds.

Excequiel.





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida