Torna al Thread

USE tempdb; GO CREATE TABLE dbo.ASSOCIAZIONI_AORMANATT( IDASSOCIAZIONE int IDENTITY(1,1) NOT NULL, IDAREA int NOT NULL, IDMANSIONE int NOT NULL, IDATTIVITA int NOT NULL, USERID varchar(50) NULL CONSTRAINT DF_ASSOCIAZIONI_AORMANATT_USERID DEFAULT ('master'), [TIMESTAMP] datetime NOT NULL CONSTRAINT DF_ASSOCIAZIONI_AORMANATT_TIMESTAMP DEFAULT (getdate()), RECORDELIMINATO bit NOT NULL CONSTRAINT DF_ASSOCIAZIONI_AORMANATT_RECORDELIMINATO DEFAULT ((0)), LASTUPDATE datetime NOT NULL CONSTRAINT DF_ASSOCIAZIONI_AORMANATT_LASTUPDATE DEFAULT (getdate()), CONSTRAINT PK_ASSOCIAZIONI_AORMANATT PRIMARY KEY (IDASSOCIAZIONE) ); GO CREATE TABLE dbo.ASSOCIAZIONI_ENTITA( IDASSOCIAZIONEENTITA int IDENTITY(1,1) NOT NULL, IDASSOCIAZIONE int NOT NULL, IDENTITA int NOT NULL, USERID varchar(50) NULL CONSTRAINT DF_ASSOCIAZIONI_ENTITA_USERID DEFAULT ('master'), [TIMESTAMP] datetime NOT NULL CONSTRAINT DF_ASSOCIAZIONI_ENTITA_TIMESTAMP DEFAULT (getdate()), RECORDELIMINATO bit NOT NULL CONSTRAINT DF_ASSOCIAZIONI_ENTITA_RECORDELIMINATO DEFAULT ((0)), CONSTRAINT PK_ASSOCIAZIONI_ENTITA PRIMARY KEY (IDASSOCIAZIONE, IDENTITA), CONSTRAINT FK_ASSOCIAZIONI_ENTITA_ASSOCIAZIONI_AORMANATT FOREIGN KEY(IDASSOCIAZIONE) REFERENCES dbo.ASSOCIAZIONI_AORMANATT (IDASSOCIAZIONE) ); GO CREATE VIEW dbo.VIEWSOSTANZAASSOCIAZIONI AS SELECT A.IDAREA , A.IDMANSIONE , A.IDATTIVITA , A.IDASSOCIAZIONE , E.IDENTITA AS IDSOSTANZA , E.RECORDELIMINATO , E.USERID , E.TIMESTAMP , E.IDASSOCIAZIONEENTITA FROM dbo.ASSOCIAZIONI_AORMANATT AS A JOIN dbo.ASSOCIAZIONI_ENTITA AS E ON A.IDASSOCIAZIONE = E.IDASSOCIAZIONE GO CREATE TRIGGER dbo.tr_ViewSostanzaAssociazioni ON dbo.VIEWSOSTANZAASSOCIAZIONI INSTEAD OF INSERT AS DECLARE @IDAREA int , @IDMANSIONE int , @IDATTIVITA int , @IDASSOCIAZIONE int , @IDSOSTANZA int , @RECORDELIMINATO bit , @USERID varchar(50) , @TIMESTAMP datetime , @IDASSOCIAZIONEENTITA int DECLARE curInserted INSENSITIVE CURSOR FOR SELECT * FROM INSERTED FOR READ ONLY OPEN curInserted -- Prima lettura FETCH NEXT FROM curInserted INTO @IDAREA , @IDMANSIONE , @IDATTIVITA , @IDASSOCIAZIONE , @IDSOSTANZA , @RECORDELIMINATO , @USERID , @TIMESTAMP , @IDASSOCIAZIONEENTITA -- Loop WHILE @@FETCH_STATUS = 0 BEGIN IF NOT EXISTS( SELECT * FROM dbo.ASSOCIAZIONI_AORMANATT WHERE IDAREA = @IDAREA AND IDMANSIONE = @IDMANSIONE AND IDATTIVITA = @IDATTIVITA ) BEGIN -- Inserisco una nuova riga in dbo.ASSOCIAZIONI_AORMANATT INSERT dbo.ASSOCIAZIONI_AORMANATT(IDAREA, IDMANSIONE, IDATTIVITA) VALUES (@IDAREA, @IDMANSIONE, @IDATTIVITA) SET @IDASSOCIAZIONE = SCOPE_IDENTITY() -- Inserisco una nuova riga in dbo.ASSOCIAZIONI_ENTITA INSERT dbo.ASSOCIAZIONI_ENTITA(IDASSOCIAZIONE, IDENTITA, RECORDELIMINATO, USERID, [TIMESTAMP]) VALUES( @IDASSOCIAZIONE , @IDSOSTANZA , COALESCE(@RECORDELIMINATO, 0) , COALESCE(@USERID, 'master') , COALESCE(@TIMESTAMP, CURRENT_TIMESTAMP) ) END -- Letture successive FETCH NEXT FROM curInserted INTO @IDAREA , @IDMANSIONE , @IDATTIVITA , @IDASSOCIAZIONE , @IDSOSTANZA , @RECORDELIMINATO , @USERID , @TIMESTAMP , @IDASSOCIAZIONEENTITA END CLOSE curInserted DEALLOCATE curInserted GO -- Inserimento singolo INSERT dbo.VIEWSOSTANZAASSOCIAZIONI(IDAREA, IDMANSIONE, IDATTIVITA, IDSOSTANZA) VALUES (1, 2, 3, 4); SELECT * FROM dbo.VIEWSOSTANZAASSOCIAZIONI; /* Output: IDAREA IDMANSIONE IDATTIVITA IDASSOCIAZIONE IDSOSTANZA RECORDELIMINATO USERID TIMESTAMP IDASSOCIAZIONEENTITA ----------- ----------- ----------- -------------- ----------- --------------- ------- ----------------------- -------------------- 1 2 3 1 4 0 master 2008-06-17 18:10:59.437 1 (1 row(s) affected) */ -- Inserimento multiplo INSERT dbo.VIEWSOSTANZAASSOCIAZIONI(IDAREA, IDMANSIONE, IDATTIVITA, IDSOSTANZA) SELECT 5, 6, 7, 8 UNION ALL SELECT 9, 10, 11, 12 UNION ALL SELECT 13, 14, 15, 16; SELECT * FROM dbo.VIEWSOSTANZAASSOCIAZIONI; /* Output: IDAREA IDMANSIONE IDATTIVITA IDASSOCIAZIONE IDSOSTANZA RECORDELIMINATO USERID TIMESTAMP IDASSOCIAZIONEENTITA ----------- ----------- ----------- -------------- ----------- --------------- ------- ----------------------- -------------------- 1 2 3 1 4 0 master 2008-06-17 18:10:59.437 1 5 6 7 2 8 0 master 2008-06-17 18:12:53.280 2 9 10 11 3 12 0 master 2008-06-17 18:12:53.280 3 13 14 15 4 16 0 master 2008-06-17 18:12:53.280 4 (4 row(s) affected) */ -- Inserimento con tutte le colonne (ad esclusione di IDASSOCIAZIONE e IDASSOCIAZIONEENTITA che sono IDENTITY) INSERT dbo.VIEWSOSTANZAASSOCIAZIONI( IDAREA , IDMANSIONE , IDATTIVITA , IDSOSTANZA , RECORDELIMINATO , USERID , [TIMESTAMP] ) VALUES (17, 18, 19, 20, 1, 'Lorenzo', CURRENT_TIMESTAMP); SELECT * FROM dbo.VIEWSOSTANZAASSOCIAZIONI; /* Output: IDAREA IDMANSIONE IDATTIVITA IDASSOCIAZIONE IDSOSTANZA RECORDELIMINATO USERID TIMESTAMP IDASSOCIAZIONEENTITA ----------- ----------- ----------- -------------- ----------- --------------- -------- ----------------------- -------------------- 1 2 3 1 4 0 master 2008-06-17 18:10:59.437 1 5 6 7 2 8 0 master 2008-06-17 18:12:53.280 2 9 10 11 3 12 0 master 2008-06-17 18:12:53.280 3 13 14 15 4 16 0 master 2008-06-17 18:12:53.280 4 17 18 19 5 20 1 Lorenzo 2008-06-17 18:19:13.340 5 (5 row(s) affected) */ DROP VIEW dbo.VIEWSOSTANZAASSOCIAZIONI; DROP TABLE dbo.ASSOCIAZIONI_ENTITA, dbo.ASSOCIAZIONI_AORMANATT;
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5