W załączeniu ...

--

  Marek Paliwoda
[EMAIL PROTECTED]
--**************************************************
--**************************************************
--**************************************************

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Frm_OnUpd]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Frm_OnUpd]
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

/*
CREATE TRIGGER CSMS_Frm_OnUpd ON dbo.K0_KatalogFirm
FOR UPDATE AS
BEGIN
  INSERT INTO CSMS_K0_KatalogFirm
    ( idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      kodPocztowy,  miejscowosc,  ulica,  nrDomu,
      kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
      kodOperacji )
  SELECT
    I.idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
    A.kodPocztowy, M.miejscowosc, A.ulica, A.nrDomu,
    B.kodPocztowy, N.miejscowosc, B.ulica, B.nrDomu,
    'U'
  FROM inserted I INNER JOIN ( K0_Adres A INNER JOIN A0_Miejscowosc M
                                 ON M.idMiejscowosci=A.idMiejscowosc
                             ) ON A.idFirmy=I.idFirmy AND A.typAdresu=1
                  LEFT  JOIN ( K0_Adres B INNER JOIN A0_Miejscowosc N
                                 ON N.idMiejscowosci=B.idMiejscowosc
                             ) ON B.idFirmy=I.idFirmy AND B.typAdresu=2
END
*/
--GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

exec sp_settriggerorder 'CSMS_Frm_OnUpd', @order='last', @stmttype = 'UPDATE'

--**************************************************

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Adr_OnIns]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Adr_OnIns]
GO

CREATE TRIGGER CSMS_Adr_OnIns ON dbo.K0_Adres
FOR INSERT AS
BEGIN
  DECLARE @IDFrm        INTEGER
  DECLARE @Skrot        VARCHAR(40)
  DECLARE @Nazwa        VARCHAR(200)
  DECLARE @Nip          CHAR(13)
  DECLARE @Regon        CHAR(20)
  DECLARE @KodPcz       CHAR(6)
  DECLARE @Miejsc       VARCHAR(50)
  DECLARE @Ulica        VARCHAR(30)
  DECLARE @NrDom        VARCHAR(10)
  DECLARE @KodPc1       CHAR(6)
  DECLARE @Miejs1       VARCHAR(50)
  DECLARE @Ulic1        VARCHAR(30)
  DECLARE @NrDo1        VARCHAR(10)
  DECLARE @Oper         CHAR(1)

  DECLARE @IDCsms       INTEGER

  -- Wstawienie rekordu wynikaj¥cego z typuAdresu=1
  -- (mo¾e by† "I" lub "U" - zale¾nie jaka byˆa op.)

  DECLARE genCSMS CURSOR LOCAL FAST_FORWARD FOR
    SELECT
      I.idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      I.kodPocztowy, M.miejscowosc, I.ulica, I.nrDomu,
      B.kodPocztowy, N.miejscowosc, B.ulica, B.nrDomu,
      'I'
    FROM inserted I
           INNER JOIN A0_Miejscowosc M
             ON M.idMiejscowosci=I.idMiejscowosc
           INNER JOIN (
             K0_KatalogFirm F
               LEFT  JOIN (
                 K0_Adres B
                   INNER JOIN A0_Miejscowosc N
                     ON N.idMiejscowosci=B.idMiejscowosc
               ) ON B.idFirmy=F.idFirmy AND B.typAdresu=2
           ) ON F.idFirmy=I.idFirmy
    WHERE I.typAdresu=1


  OPEN genCSMS

  WHILE 1 = 1
  BEGIN
    FETCH NEXT FROM genCSMS INTO
        @IDFrm, @Skrot,  @Nazwa,  @Nip,
        @Regon, @KodPcz, @Miejsc, @Ulica,
        @NrDom, @KodPc1, @Miejs1, @Ulic1,
        @NrDo1, @Oper
    IF @@FETCH_STATUS <> 0 BREAK

    --+++++++++++++++++++++++++++++++++++++++++

    /*
    -- Czy ju¾ czasami nie mamy tego rekordu ?
    SET @IDCsms = null

    SELECT @IDCsms=IDcsmsKF
    FROM   CSMS_K0_KatalogFirm
    WHERE  idFirmy = @IDFrm
      AND  kodOperacji = 'I'

    -- Nie - nie mamy
    IF @IDCsms IS null
      INSERT INTO CSMS_K0_KatalogFirm (
        idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
        kodPocztowy,  miejscowosc,  ulica,  nrDomu,
        kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
        kodOperacji
      ) VALUES (
        @IDFrm,  @Skrot,  @Nazwa, @Nip,   @Regon,
        @KodPcz, @Miejsc, @Ulica, @NrDom,
        @KodPc1, @Miejs1, @Ulic1, @NrDo1,
        @Oper
      )
    -- Tak - ju¾ mamy
    ELSE
      UPDATE CSMS_K0_KatalogFirm SET
        krotkaNazwa  = @Skrot,
        pelnaNazwa   = @Nazwa,
        nip          = @Nip,
        regon        = @Regon,
        kodPocztowy  = @KodPcz,
        miejscowosc  = @Miejsc,
        ulica        = @Ulica,
        nrDomu       = @NrDom,
        kodPocztowy1 = @KodPc1,
        miejscowosc1 = @Miejs1,
        ulica1       = @Ulic1,
        nrDomu1      = @NrDo1,
        Pobrano      =  null
      WHERE IDcsmsKF = @IDCsms
    */

    INSERT INTO CSMS_K0_KatalogFirm (
      idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      kodPocztowy,  miejscowosc,  ulica,  nrDomu,
      kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
      kodOperacji
    ) VALUES (
      @IDFrm,  @Skrot,  @Nazwa, @Nip,   @Regon,
      @KodPcz, @Miejsc, @Ulica, @NrDom,
      @KodPc1, @Miejs1, @Ulic1, @NrDo1,
      @Oper
    )
  END
  CLOSE genCSMS
  DEALLOCATE genCSMS

  --*********************************************

  -- Wszystkie operacje na typieAdresu=2 traktujemy jak "U"

  INSERT INTO CSMS_K0_KatalogFirm
    ( idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      kodPocztowy,  miejscowosc,  ulica,  nrDomu,
      kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
      kodOperacji )
  SELECT
    I.idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
    B.kodPocztowy, N.miejscowosc, B.ulica, B.nrDomu,
    I.kodPocztowy, M.miejscowosc, I.ulica, I.nrDomu,
    'U'
  FROM inserted I
         INNER JOIN A0_Miejscowosc M
           ON M.idMiejscowosci=I.idMiejscowosc
         INNER JOIN (
           K0_KatalogFirm F
             INNER JOIN K0_Adres B ON B.idFirmy=F.idFirmy AND B.typAdresu=1
             INNER JOIN A0_Miejscowosc N ON N.idMiejscowosci=B.idMiejscowosc
         ) ON F.idFirmy=I.idFirmy
  WHERE I.typAdresu=2
END
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Adr_OnUpd]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Adr_OnUpd]
GO

CREATE TRIGGER CSMS_Adr_OnUpd ON dbo.K0_Adres
FOR UPDATE AS
BEGIN
  INSERT INTO CSMS_K0_KatalogFirm
    ( idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      kodPocztowy,  miejscowosc,  ulica,  nrDomu,
      kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
      kodOperacji )
  SELECT DISTINCT
    I.idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
    I.kodPocztowy, M.miejscowosc, I.ulica, I.nrDomu,
    B.kodPocztowy, N.miejscowosc, B.ulica, B.nrDomu,
    'U'
  FROM inserted I
         INNER JOIN A0_Miejscowosc M
           ON M.idMiejscowosci=I.idMiejscowosc
         INNER JOIN (
           K0_KatalogFirm F
             LEFT  JOIN (
               K0_Adres B
                 INNER JOIN A0_Miejscowosc N
                   ON N.idMiejscowosci=B.idMiejscowosc
             ) ON B.idFirmy=F.idFirmy AND B.typAdresu=2
         ) ON F.idFirmy=I.idFirmy
  WHERE I.typAdresu=1
END
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Adr_OnDel]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Adr_OnDel]
GO

CREATE TRIGGER CSMS_Adr_OnDel ON dbo.K0_Adres
FOR DELETE AS
BEGIN
  INSERT INTO CSMS_K0_KatalogFirm
    ( idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      kodPocztowy,  miejscowosc,  ulica,  nrDomu,
      kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
      kodOperacji )
  SELECT
    I.idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
    B.kodPocztowy, N.miejscowosc, B.ulica, B.nrDomu,
    I.kodPocztowy, M.miejscowosc, I.ulica, I.nrDomu,
    'U'
  FROM deleted I
         INNER JOIN A0_Miejscowosc M
           ON M.idMiejscowosci=I.idMiejscowosc
         INNER JOIN (
           K0_KatalogFirm F
             INNER JOIN K0_Adres B ON B.idFirmy=F.idFirmy AND B.typAdresu=1
             INNER JOIN A0_Miejscowosc N ON N.idMiejscowosci=B.idMiejscowosc
         ) ON F.idFirmy=I.idFirmy
  WHERE I.typAdresu=2
    AND NOT EXISTS (
            SELECT idFirmy FROM deleted J
            WHERE  J.idFirmy = I.idFirmy
              AND  J.typAdresu=1
        )

  INSERT INTO CSMS_K0_KatalogFirm
    ( idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
      kodPocztowy,  miejscowosc,  ulica,  nrDomu,
      kodPocztowy1, miejscowosc1, ulica1, nrDomu1,
      kodOperacji )
  SELECT DISTINCT
    I.idFirmy, krotkaNazwa, pelnaNazwa, nip, regon,
    I.kodPocztowy, M.miejscowosc, I.ulica, I.nrDomu,
    B.kodPocztowy, N.miejscowosc, B.ulica, B.nrDomu,
    'D'
  FROM deleted I
         INNER JOIN A0_Miejscowosc M
           ON M.idMiejscowosci=I.idMiejscowosc
         INNER JOIN (
           K0_KatalogFirm F
             LEFT  JOIN (
               K0_Adres B
                 INNER JOIN A0_Miejscowosc N
                   ON N.idMiejscowosci=B.idMiejscowosc
             ) ON B.idFirmy=F.idFirmy AND B.typAdresu=2
         ) ON F.idFirmy=I.idFirmy
  WHERE I.typAdresu=1
END
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

exec sp_settriggerorder 'CSMS_Adr_OnIns', @order='last', @stmttype = 'INSERT'
exec sp_settriggerorder 'CSMS_Adr_OnUpd', @order='last', @stmttype = 'UPDATE'
exec sp_settriggerorder 'CSMS_Adr_OnDel', @order='last', @stmttype = 'DELETE'

--**************************************************
--**************************************************
--**************************************************

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Zlc_OnIns]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Zlc_OnIns]
GO

CREATE TRIGGER CSMS_Zlc_OnIns ON dbo.Z0_Zlecenia
FOR INSERT AS
BEGIN
  -- wstawiamy wszystkie  zapisy 'I' nawet dla tych, kt¢rzy ju¾ s¥
  INSERT INTO CSMS_Z0_Zlecenia
    ( nrZlecenia, dataOd, dataDo, dataRejZlecenia, trescZlecWgNabywcy,
      trescZlecWgWystawcy, idNabywca, idZleceniodawca, idOdbiorca,
      kodOsrodka, kodDzialu, kodOddzialu, kodOperacji, zamowienie )
  SELECT
    I.nrZlecenia, I.dataOd, I.dataDo, I.dataRejZlecenia, I.trescZlecWgNabywcy,
    I.trescZlecWgWystawcy, I.idNabywca, I.idZleceniodawca, I.idOdbiorca,
    S.Kod AS kodOsrodka, D.Kod AS kodDzialu, O.Kod AS kodOddzialu, 'I',
    I.zamowienie
  FROM inserted I INNER JOIN Oddzial O ON O.IdOddzial=I.IdOddzial
                  INNER JOIN Dzial   D ON D.IdDzial=O.IdDzial
                  INNER JOIN Osrodek S ON S.IdOsrodek=D.IdOsrodek
END
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Zlc_OnUpd]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Zlc_OnUpd]
GO

CREATE TRIGGER CSMS_Zlc_OnUpd ON dbo.Z0_Zlecenia
FOR UPDATE AS
BEGIN
  INSERT INTO CSMS_Z0_Zlecenia
    ( nrZlecenia, dataOd, dataDo, dataRejZlecenia, trescZlecWgNabywcy,
      trescZlecWgWystawcy, idNabywca, idZleceniodawca, idOdbiorca,
      kodOsrodka, kodDzialu, kodOddzialu, kodOperacji, zamowienie )
  SELECT
    I.nrZlecenia, I.dataOd, I.dataDo, I.dataRejZlecenia, I.trescZlecWgNabywcy,
    I.trescZlecWgWystawcy, I.idNabywca, I.idZleceniodawca, I.idOdbiorca,
    S.Kod AS kodOsrodka, D.Kod AS kodDzialu, O.Kod AS kodOddzialu, 'U',
    I.zamowienie
  FROM inserted I INNER JOIN Oddzial O ON O.IdOddzial=I.IdOddzial
                  INNER JOIN Dzial   D ON D.IdDzial=O.IdDzial
                  INNER JOIN Osrodek S ON S.IdOsrodek=D.IdOsrodek
END
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

if exists (select * from dbo.sysobjects
           where id = object_id(N'[dbo].[CSMS_Zlc_OnDel]')
           and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[CSMS_Zlc_OnDel]
GO

CREATE TRIGGER CSMS_Zlc_OnDel ON dbo.Z0_Zlecenia
FOR DELETE AS
BEGIN
  INSERT INTO CSMS_Z0_Zlecenia
    ( nrZlecenia, dataOd, dataDo, dataRejZlecenia, trescZlecWgNabywcy,
      trescZlecWgWystawcy, idNabywca, idZleceniodawca, idOdbiorca,
      kodOsrodka, kodDzialu, kodOddzialu, kodOperacji, zamowienie )
  SELECT
    D.nrZlecenia, D.dataOd, D.dataDo, D.dataRejZlecenia, D.trescZlecWgNabywcy,
    D.trescZlecWgWystawcy, D.idNabywca, D.idZleceniodawca, D.idOdbiorca,
    OSR.Kod AS kodOsrodka, DZZ.Kod AS kodDzialu, ODD.Kod AS kodOddzialu, 'D',
    D.zamowienie
  FROM deleted D INNER JOIN Oddzial ODD ON ODD.IdOddzial=D.IdOddzial
                 INNER JOIN Dzial   DZZ ON DZZ.IdDzial=ODD.IdDzial
                 INNER JOIN Osrodek OSR ON OSR.IdOsrodek=DZZ.IdOsrodek
END
GO

--++++++++++++++++++++++++++++++++++++++++++++++++++

exec sp_settriggerorder 'CSMS_Zlc_OnIns', @order='last', @stmttype = 'INSERT'
exec sp_settriggerorder 'CSMS_Zlc_OnUpd', @order='last', @stmttype = 'UPDATE'
exec sp_settriggerorder 'CSMS_Zlc_OnDel', @order='last', @stmttype = 'DELETE'

--**************************************************
--**************************************************
--**************************************************
_______________________________________________
Harbour mailing list
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to