Torna al Thread
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[InserisciZone]'))
DROP TRIGGER [dbo].[InserisciZone]
GO
CREATE TRIGGER [dbo].[InserisciZone] ON [dbo].[Zone]
AFTER INSERT AS
BEGIN
DECLARE @numins INT
DECLARE @codse CHAR(8)
-- controllo che esista una sola riga in inserimento
SELECT @numins = COUNT(*) FROM inserted
IF @numins <> 1
BEGIN
RAISERROR(N'Non sono ammessi inserimenti di massa sulle zone',10,1)
ROLLBACK
END
SET NOCOUNT ON;
-- calcolo il codice del sistema gestionale esterno (i primi otto caratteri)
SET @codse = CAST((SELECT I.codice FROM inserted AS I) AS char(8))
-- controllo che il codice non sia già presente nel sistema gestionale esterno
IF EXISTS (SELECT * FROM DBEXT..port.zon AS Z WHERE (Z.zn_sigla = CAST(@codse AS char(8))))
BEGIN
RAISERROR(N'La zona è già presente sul gestionale',10,1)
ROLLBACK
END
-- inserisco il nuovo codice nel sistema esterno e aggiorno il legame sulla tabella locale
BEGIN TRY
BEGIN
INSERT INTO DBEXT..port.zon (zn_sigla, zn_descrizione, zn_ragg_1, zn_ragg_2)
SELECT CAST(@codse AS char(8)), CAST(I.descrizione AS char(30)), 'AUT', '' FROM inserted AS I;
UPDATE dbo.Zone
SET dbo.Zone.codSE = CAST(@codse AS char(8))
FROM dbo.Zone AS Z INNER JOIN inserted AS I ON (Z.codice = I.codice);
END
END TRY
BEGIN CATCH
BEGIN
PRINT 'Errore: '+ CAST(ERROR_NUMBER() AS VARCHAR) +' '+ ERROR_MESSAGE()
--RAISERROR(N'Problemi in inserimento zona sul gestionale',10,1)
ROLLBACK
END
END CATCH
END