Ailsom F. Heringer (Osklen) escreveu:
Foxers,
How can I create a sqlserver trigger for update, to allow updates in only one column of a table ?


Answering my own question:

ALTER TRIGGER UPD_PontosManuais ON PontosManuais FOR UPDATE NOT FOR REPLICATION AS -- Não permite a alteração de dados caso o lancamento já tenha sido processado
-- Aílsom F. Heringer - 15 de setembro de 2006
BEGIN
  DECLARE @mCd    CHAR(6),
          @mDELCd CHAR(6),
          @mCodigoDoParceiro    CHAR(11),
          @mDELCodigoDoParceiro CHAR(11),
          @mCodigoCliente    VARCHAR(50),
          @mDELCodigoCliente VARCHAR(50),
          @mDataDoMovimento    DATETIME,
          @mDELDataDoMovimento DATETIME,
          @mTipoDeMovimento    CHAR(20),
          @mDELTipoDeMovimento CHAR(20),
          @mPontosEntrados    CHAR(12),
          @mDELPontosEntrados CHAR(12),
          @mPontosSaidos    CHAR(12),
          @mDELPontosSaidos CHAR(12),
          @mArq_Nome    VARCHAR(50),
          @mDELArq_Nome VARCHAR(50),
          @mProcessado BIT,
          @mErro INT,
          @mErroMsg VARCHAR(255)

  SELECT @mCd    = A.Cd,
         @mDELCd = D.Cd,
         @mCodigoDoParceiro    = A.CodigoDoParceiro,
         @mDELCodigoDoParceiro = D.CodigoDoParceiro,
         @mCodigoCliente    = A.CodigoCliente,
         @mDELCodigoCliente = D.CodigoCliente,
         @mDataDoMovimento    = A.DataDoMovimento,
         @mDELDataDoMovimento = D.DataDoMovimento,
         @mTipoDeMovimento    = A.TipoDeMovimento,
         @mDELTipoDeMovimento = D.TipoDeMovimento,
         @mPontosEntrados    = A.PontosEntrados,
         @mDELPontosEntrados = D.PontosEntrados,
         @mPontosSaidos    = A.PontosSaidos,
         @mDELPontosSaidos = D.PontosSaidos,
         @mArq_Nome    = A.Arq_Nome,
         @mDELArq_Nome = D.Arq_Nome,
         @mProcessado = A.Processado
         FROM DELETED D
         INNER JOIN INSERTED A ON D.Cd = A.Cd

  IF (@mCd <> @mDelCd OR
      @mCodigoDoParceiro <> @mDelCodigoDoParceiro OR
      @mCodigoCliente <> @mCodigoCliente OR
      @mDataDoMovimento <> @mDataDoMovimento OR
      @mTipoDeMovimento <> @mDELTipoDeMovimento OR
      @mPontosEntrados <> @mDELPontosEntrados OR
      @mPontosSaidos <> @mDELPontosSaidos OR
      @mArq_Nome <> @mDELArq_Nome)
      AND @mProcessado = 1
      BEGIN
          SELECT @mErro = 3000002,
@mErroMsg = '#AFH# Esta Lançamento já foi processado, e não poderá ser alterado.'
          GOTO MostraErro
      END
  RETURN

MostraErro:
  RAISERROR @mErro @mErroMsg
  ROLLBACK TRANSACTION
END



--
Aílsom F. Heringer
[EMAIL PROTECTED]
Skype: ailsom.osklen
Analista de Sistemas
----------------------------------
Osklen
Departamento de Informática
Rio de Janeiro - RJ
BRASIL
http://www.osklen.com.br
55 21 22198971




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to