Transazioni, processi e trigger

venerdì 08 ottobre 2010 - 11.29
Tag Elenco Tags  Windows Server 2008 R2  |  SQL Server 2005

Bolo Profilo | Junior Member

Buongiorno a tutti, vorrei capire il perché di questa cosa:

Una store procedure mi scrive un record in un campo di una tabella denominata CLA_CUST_TAB_REPORT e lascia gli altri su NULL
All'inserimento di un nuovo record nella tabella CLA_CUST_TAB_REPORT parte un trigger che mi compila gli altri campi

Questo trigger prende i dati tramite una select da due tabelle R5EVENTS e R5PROPERTYVALUES, solo che da R5EVENTS ho i dati ho i dati aggiornati dall'altra (R5PROPERTYVALUES) no. La cosa strana è che se disattivo il trigger e faccio partire manualmente la select del trigger i dati sono aggiornati.

Sembrerebbe un problema dovuto al fatto che fino a quando non termina il trigger non scrive sulla tabella R5PROPERTYVALUES, però visto che le operazioni sono scollegate (store procedure e trigger) non riesco a spiegarmi questa cosa...

Posto di seguito il codice del trigger.


USE EAM

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER trigger [CUST_COMPILA_ORE]
on [dbo].[CLA_CUST_TAB_REPORT]

after insert

AS

DECLARE @TIPO nvarchar(30)
DECLARE @CODICE nvarchar(30)
DECLARE @DESCRIZIONE nvarchar(80)
DECLARE @SEDE nvarchar(30)
DECLARE @OPERATORE nvarchar(30)
DECLARE @INIZIO_EFF datetime
DECLARE @FINE_EFF datetime
DECLARE @INIZIO datetime
DECLARE @FINE datetime
DECLARE @ORD_DIU decimal(18, 0)
DECLARE @ORD_NOT decimal(18, 0)
DECLARE @ORD_FES decimal(18, 0)
DECLARE @ORD_FEN decimal(18, 0)
DECLARE @ORD_EXT_DIU decimal(18, 0)
DECLARE @ORD_EXT_NOT decimal(18, 0)
DECLARE @ORD_EXT_FES decimal(18, 0)
DECLARE @ORD_EXT_FEN decimal(18, 0)
DECLARE @STR_DIU decimal(18, 0)
DECLARE @STR_NOT decimal(18, 0)
DECLARE @STR_FES decimal(18, 0)
DECLARE @STR_FEN decimal(18, 0)
DECLARE @FERIE decimal(18, 0)
DECLARE @PERMESSO decimal(18, 0)
DECLARE @MALATTIA nvarchar(1)
DECLARE @CAUSALE_IN nvarchar(30)
DECLARE @CAUSALE_OUT nvarchar(30)

SET @CODICE = (SELECT CODICE FROM inserted)

-- Compilo tutti i dati che mi servono

BEGIN

SELECT @TIPO = UCO_DESC,
-- @CODICE = @CODICE,
@DESCRIZIONE = EVT_DESC,
@SEDE = EVT_OBJECT,
@OPERATORE= EVT_PERSON,
@INIZIO_EFF = (select prv_dvalue from R5propertyvalues where prv_code = EVT_CODE and PRV_PROPERTY = 'UTNIN'),
@FINE_EFF = (select prv_dvalue from R5propertyvalues where prv_code = @CODICE and PRV_PROPERTY = 'UTNOUT'),
@INIZIO = (select prv_dvalue from R5propertyvalues where prv_code = @CODICE and PRV_PROPERTY = 'UTNCIN'),
@FINE = (select prv_dvalue from R5propertyvalues where prv_code = @CODICE and PRV_PROPERTY = 'UTNCOUT'),
@ORD_DIU = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(0),(0),(0)),
@ORD_NOT = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(0),(1),(0)),
@ORD_FES = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(1),(0),(0)),
@ORD_FEN = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(1),(1),(0)),
@ORD_EXT_DIU = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(0),(0),(1)),
@ORD_EXT_NOT = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(0),(1),(1)),
@ORD_EXT_FES = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(1),(0),(1)),
@ORD_EXT_FEN = dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (@CODICE,'fc'),@CODICE,(1),(1),(1)),
@STR_DIU = NULL,
@STR_NOT = NULL,
@STR_FES = NULL,
@STR_FEN = NULL,
@FERIE = NULL,
@PERMESSO = NULL,
@MALATTIA = NULL,
@CAUSALE_IN = EVT_UDFCHAR01,
@CAUSALE_OUT = EVT_UDFCHAR02

FROM R5EVENTS

LEFT OUTER JOIN R5PROPERTYVALUES
ON EVT_CODE = PRV_CODE

LEFT OUTER JOIN R5UCODES
ON EVT_JOBTYPE = UCO_CODE

WHERE EVT_CODE = @CODICE AND(EVT_JOBTYPE = 'UTNTO' or EVT_JOBTYPE = 'UTNSP') AND EVT_STATUS = 'C' AND
(PRV_PROPERTY = 'UTNCIN' OR PRV_PROPERTY = 'UTNCOUT' OR PRV_PROPERTY = 'UTNIN' OR PRV_PROPERTY = 'UTNOUT')

group by evt_code, uco_desc, evt_desc, evt_object, EVT_PERSON,EVT_UDFCHAR01,EVT_UDFCHAR02

END

BEGIN
UPDATE CLA_CUST_TAB_REPORT
SET
TIPO = @TIPO,
-- CODICE = @CODICE,
DESCRIZIONE = @DESCRIZIONE,
SEDE = @SEDE,
OPERATORE = @OPERATORE,
INIZIO_EFF = @INIZIO_EFF,
FINE_EFF = @FINE_EFF,
INIZIO = @INIZIO,
FINE = @FINE,
ORD_DIU = @ORD_DIU,
ORD_NOT = @ORD_NOT,
ORD_FES = @ORD_FES,
ORD_FEN = @ORD_FEN,
ORD_EXT_DIU = @ORD_EXT_DIU,
ORD_EXT_NOT = @ORD_EXT_NOT,
ORD_EXT_FES = @ORD_EXT_FES,
ORD_EXT_FEN = @ORD_EXT_FEN,
STR_DIU = @STR_DIU,
STR_NOT = @STR_NOT,
STR_FES = @STR_FES,
STR_FEN = @STR_FEN,
FERIE = @FERIE,
PERMESSO = @PERMESSO,
MALATTIA = @MALATTIA,
CAUSALE_IN = @CAUSALE_IN,
CAUSALE_OUT = @CAUSALE_OUT
WHERE CODICE = @CODICE
GOTO GO_BACK

END

-- Rientro alla flex chiamante

GO_BACK:
RETURN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
GRANT EXECUTE ON [dbo].[CUST_CALCOLA_ORE] TO PUBLIC
GO
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5