1.976 messaggi dal 27 luglio 2005
Contributi
salve Beppe,
allora.... :)
io farei molto diversamente... scriverei un trigger INSTEAD OF UPDATE...
al suo interno, verificherei che, nel caso la riga sia NON modificabile
('§-2#', '§-1#'), allora aggiornerei SOLO le colonne modificabili..
nel caso invece sia modificabile (quindi <> '§-2#', '§-1#'), allora propagherei tutte le modifiche...
risolverei la questione con 2 operazioni di update, una per le righe NON modificabili e una per quelle modificabili, in modo da poter permettere anche operazioni multi riga come nell'esempio piu' sotto..

SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
  Id int NOT NULL, 
  ALI_TABELLE varchar(10) NOT NULL,
  colVariant int NOT NULL,
  colStatic int NOT NULL  -- non modificabile
  );
GO
CREATE TRIGGER tr_t_$_U_ ON dbo.t
  INSTEAD OF UPDATE
AS BEGIN
  IF @@ROWCOUNT = 0 RETURN;
  
  -- aggiornamento delle sole colonne modificabili
  UPDATE dbo.t
    SET colVariant = i.colVariant
    FROM dbo.t t
      JOIN inserted i ON i.Id = t.Id
    WHERE i.ALI_TABELLE IN ('§-2#', '§-1#')

  -- aggiornamento di tutte le colonne
  UPDATE dbo.t
    SET colVariant = i.colVariant
      , colStatic = i.colStatic 
    FROM dbo.t t
      JOIN inserted i ON i.Id = t.Id
    WHERE i.ALI_TABELLE NOT IN ('§-2#', '§-1#')

END;
GO
INSERT INTO dbo.t
  VALUES ( 1, 'MODIFIC', 1, 1 )
    , ( 2, '§-1#', 2, 2 ), ( 3, '§-2#', 3, 3 ) -- NON MODIFICABILI
    , ( 4, 'MODIFIC2', 4, 4 );
GO
SELECT *
  FROM dbo.t;
GO
UPDATE dbo.t
  SET colVariant = colVariant + 10
    , colStatic = colStatic + 10
  WHERE Id = 1;

SELECT *
  FROM dbo.t;
GO
UPDATE dbo.t
  SET colVariant = colVariant + 20
    , colStatic = colStatic +20
  WHERE Id = 2;

SELECT *
  FROM dbo.t;
GO
UPDATE dbo.t
  SET colVariant = colVariant + 10
    , colStatic = colStatic + 10

SELECT *
  FROM dbo.t;
GO
DROP TABLE dbo.t
--<-------
Id          ALI_TABELLE colVariant  colStatic
----------- ----------- ----------- -----------
1           MODIFIC     1           1
2           §-1#        2           2
3           §-2#        3           3
4           MODIFIC2    4           4

Id          ALI_TABELLE colVariant  colStatic
----------- ----------- ----------- -----------
1           MODIFIC     11          11
2           §-1#        2           2
3           §-2#        3           3
4           MODIFIC2    4           4

Id          ALI_TABELLE colVariant  colStatic
----------- ----------- ----------- -----------
1           MODIFIC     11          11
2           §-1#        22          2
3           §-2#        3           3
4           MODIFIC2    4           4

Id          ALI_TABELLE colVariant  colStatic
----------- ----------- ----------- -----------
1           MODIFIC     21          21
2           §-1#        32          2
3           §-2#        13          3
4           MODIFIC2    14          14



nell'esempio, '§-2#' e '§-1#' consentono solo l'aggiornamento della colonna colVariant e non quella di colStatic...
se i criteri di controllo sono solo 2 va bene anche un confronto IN (a, b), se invece dovessero salire, consiglierei una tabella temporanea da mettere in JOIN...
spero di aver ben compreso la problematica...

saluti JOIN INSERTED

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
11 messaggi dal 06 febbraio 2014
Ho paura di aver capito e di non esserci arrivato prima.:-((
però via telefono non riesco a seguire troppo bene il codice. Appena mi doto di una postazione più efficiente ci ripasso.
Grazie davvero intanto
Beppe
11 messaggi dal 06 febbraio 2014
Accidentaccio Sì, bestia che sono.
La strategia è quella giusta e molto più elegante.
Quando uno si fossilizza su una soluzione, poi s'incarta sempre più e perde di vista il perseguire altre possibilità.
Grazie per l'illuminazione.
Anzi grazie esteso nel tempo, perché mi viene il dubbio che tu sia quello che tempo addietro ha scritto una pregevole interfaccia per gestire il SQL prima che MS proponesse Sql Management.
L'ho sempre tenuta tra i tools come un vero coltellino svizzero.
A presto
Beppe
1.976 messaggi dal 27 luglio 2005
Contributi
salve Beppe,

Grazie per l'illuminazione.
Anzi grazie esteso nel tempo, perché mi viene il dubbio che tu sia quello che tempo addietro ha scritto una pregevole interfaccia per gestire il SQL prima che MS proponesse Sql Management.
L'ho sempre tenuta tra i tools come un vero coltellino svizzero.


prego.... e prego ancora, anche se io stesso devo ringraziare te per averlo a suo tempo usato :)
saluti relazionali :)

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.