Applicazione di un Trigger su Update

mercoledì 04 febbraio 2009 - 16.58

Dainesi Profilo | Senior Member

Salve,

ho una tabella (in SQL Server 2000) in cui c'è una colonna che contiene un valore numerico. Questa tabella è una tabella con 10 record e il valore di questa colonna vorrei che non variasse all'indietro. Come è possibile fare ciò con un trigger o con un check ?

Grazie!



.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

alx_81 Profilo | Guru

>Salve,
Ciao!

>ho una tabella (in SQL Server 2000) in cui c'è una colonna che
>contiene un valore numerico. Questa tabella è una tabella con
>10 record e il valore di questa colonna vorrei che non variasse
>all'indietro. Come è possibile fare ciò con un trigger o con
>un check ?
Cosa intendi per "non variare all'indietro"? Nel senso che se uno imposta un valore minore dell'attuale non deve essere possibile cambiarlo?

>Grazie!
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Dainesi Profilo | Senior Member

Esatto! Hai centrato il problema. Se nella colonna c'è 89076512 non deve esser possibile inserire 89076512 o 87654.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

alx_81 Profilo | Guru

>Esatto! Hai centrato il problema. Se nella colonna c'è 89076512
>non deve esser possibile inserire 89076512 o 87654.
Direi che ti consiglio un trigger. Passami la create della tabella che ti scrivo il trigger.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Dainesi Profilo | Senior Member

Ti ringrazio fin da adesso della tua fantastica disponibilità.

Ecco lo script Create:

CREATE TABLE [dbo].[TS Parametri] (
[ParametroID] [int] NOT NULL ,
[Definizione] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL ,
[Gruppo] [nvarchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ,
[Chiave] [nvarchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ,
[Valore] [nvarchar] (255) COLLATE Latin1_General_CI_AS NOT NULL ,
[CUIDF] [bigint] NULL ,
[DAIDF] [bigint] NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TS Parametri] WITH NOCHECK ADD
CONSTRAINT [PK_TS Parametri] PRIMARY KEY CLUSTERED
(
[ParametroID]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO




P.S. La colonna incriminata si chiama Valore. E' un campo di testo poiché contiene il valore del parametro, il quale può essere sia numerico che testuale (qui stà il "casotto"). E il record su cui deve intervenire il trigger è quello dovo la colonna chiave contiene il valore "CUIDF".
.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

alx_81 Profilo | Guru

prova così:
ALTER TRIGGER dbo.TS_Parametri_Valore_CUIDF ON dbo.[TS Parametri] FOR UPDATE AS BEGIN SET NOCOUNT ON; -- ricavo la chiave DECLARE @chiave nvarchar(50) SELECT @chiave = inserted.Chiave FROM inserted IF UPDATE(Valore) AND @chiave = 'CUIDF' BEGIN DECLARE @newValue nvarchar(255) DECLARE @newValue_n int DECLARE @oldValue nvarchar(255) DECLARE @oldValue_n int SET @oldValue_n = 0 SET @newValue_n = 0 -- prendo i nuovi ed i vecchi valori SELECT @newValue = inserted.Valore FROM inserted SELECT @oldValue = deleted.Valore FROM deleted -- faccio il controllo solo se sono entrambi (nuovo e vecchio) numerici IF ISNUMERIC(@newValue) = 1 AND ISNUMERIC(@oldValue) = 1 BEGIN SET @newValue_n = CAST(@newValue AS int) SET @oldValue_n = CAST(@oldValue AS int) IF @newValue_n < @oldValue_n ROLLBACK TRAN END END END GO

fammi sapere
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Dainesi Profilo | Senior Member

Posso solo dire ... FANTASTICO ! .... e grazie!!!

Oggi lo provo.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

Dainesi Profilo | Senior Member

Eccomi di nuovo. La tua soluzione l'ho applicata ed è una bomba !! Sei fantastico ! Grazie !!!




.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

alx_81 Profilo | Guru

>Eccomi di nuovo. La tua soluzione l'ho applicata ed è una bomba
>!! Sei fantastico ! Grazie !!!
Addirittura!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Dainesi Profilo | Senior Member

"Date a Cesare quel che è di Cesare ..."

Se i complimenti te li meriti .... te li meriti !


.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872
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