Welcome to Sign in | Help
in Search

Cursor - sql server 2000

Last post 08-28-2007, 4:37 PM by crestinul. 7 replies.
Sort Posts: Previous Next
  •  08-27-2007, 1:01 PM 2565

    Cursor - sql server 2000

    Salut, am si eu nevoie de ajutorul vostru la realizarea unei proceduri....si anume:

    am tabela urmtoare

    CREATE TABLE [dbo].[Contract] (
     [IDContract] [int] NOT NULL ,
     [NumeContract] [varchar] (50)  NULL ,
     [DataFinalizareContract] [datetime] NULL ,
     [Mail] [varchar] (50)  NULL
    ) ON [PRIMARY]
    GO

    as avea nevoie de o procedura (pe care o voi pune sa se apeleze intr-un job in fiecare zi) care sa contina un cursor....si care sa-mi verifice fiecare DataFinalizareContract si sa compare cu getdate() si daca DataFinalizareContract este mai <= 4 sa trimita mail la adresa respectiva(campul mail)

    deci cu alte cuvinte daca mai sunt 4 zile pana la DataFinalizareContract sa trimita mail de instintare......ca sa trimit mail am o procedura care face lucrul asta numita _SendSMTPMail si care primeste ca parametrii To, From, Subject, TextBody

    ce ma intereseaza pe mine este cum trebuie sa arate cursorul respectiv din procedura si si cum se compara cu getdate()

    multumesc mult.

    alex.

  •  08-27-2007, 1:20 PM 2566 in reply to 2565

    Re: Cursor - sql server 2000

    in mare ar trebui ceva de genul (cu completarile respective):

    DECLARE @DataFinalizareContract datetime, @idContract int
    declare @cinetrimite varchar(50),@cineprimeste varchar(50),@Mesaj varchar (250)

    DECLARE contract_cursor CURSOR FOR
    SELECT idcontract,datafinalizarecontract FROM Contract
    --WHERE idcontract is not null
    --ORDER BY idcontract

    OPEN contract_cursor

    FETCH NEXT FROM contract_cursor
    INTO @DataFinalizareContract, @idContract


    WHILE @@FETCH_STATUS = 0
    BEGIN

    IF ---conditia daca mai sunt 4 zile pana la DataFinalizareContract
    BEGIN
     select @cineprimeste = mail from Contract (mailul pt respectivul IDContract)
      exec sp_SMTPMail @cinetrimite, @cineprimeste,'Date Contract',@Mesaj


    ELSE

     --- nu ar trebui sa faca nimic doar sa treaca la urmatorul IDContract sa compare data cu getdate()

       FETCH NEXT FROM contract_cursor
       INTO @DataFinalizareContract, @idContract
    END

    CLOSE contract_cursor
    DEALLOCATE contract_cursor
    GO

    multumesc mult

    alex.

  •  08-27-2007, 1:36 PM 2567 in reply to 2566

    Re: Cursor - sql server 2000

    Pentru a calcula diferenta dintre 2 date calendaristice poti utiliza functia DATEDIFF: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/57e0601a-9d97-4437-9be1-7efa639b39fc.htm (copy + paste in Books Online - sectiunea URL).

    In cazul tau poti formula conditia din IF astfel:

    IF ( DATEDIFF(dd,@DataFinalizareContract,@GETDATE()) <= 4 ) 

  •  08-27-2007, 2:19 PM 2568 in reply to 2567

    Re: Cursor - sql server 2000

    nu stiu cat e de corect dar am facut asa:

    am facut un view care-mi intoarce exact ce am eu nevoie....cu conditia IF ( DATEDIFF(dd,@DataFinalizareContract,@GETDATE()) = 4 )

    am facut view pt ca problema sa complicat pe parcurs si nu mai era vorba doar de o tabela cum am crezut eu initial.

    care arata asa:

    create view vw_ListaMail
    as

    SELECT   pc.DataLivrarii,pc.DataEfectLivrare,su.InternalEmailAddress,vc.EUltimaVersiune,ncv.new_name

    FROM     dbo.PRODUSCONTRACT pc
     INNER JOIN dbo.VERSIUNECONTRACT vc ON pc.VersiuneContractID = vc.VersiuneContractID
     INNER JOIN dbo.CONTRACT c ON vc.ContractID = c.ContractID
     INNER JOIN mscrm..New_ContractVanzari ncv on c.new_contractvanzariid = ncv.new_contractvanzariid
     INNER JOIN mscrm..systemuser su on ncv.ownerid = su.systemuserid

    WHERE   pc.DataEfectLivrare is null
     and datediff(day,pc.DataLivrarii,getdate()) = 4
     and su.InternalEMailAddress is not null
     and vc.EUltimaVersiune = 1

    dupa care am facut procedura de trimitere mail (pe care o voi pune intr-un job sa se execute zilnic) astfel:

    create proc spr_TrimiteMailAvertizare_ContractTEST
    as

    DECLARE @DataLivrarii datetime, @InternalEmailAddress nvarchar (100), @new_name nvarchar(100)
    declare @Mesaj varchar (250)

    DECLARE contract_cursor CURSOR FOR
    SELECT DataLivrarii,InternalEmailAddress,new_name FROM vw_ListaMail

    OPEN contract_cursor

    FETCH NEXT FROM contract_cursor
    INTO @DataLivrarii, @InternalEmailAddress,@new_name


    WHILE @@FETCH_STATUS = 0
    BEGIN

     set @Mesaj = @new_name -- se modifica pe parcurs
      
     exec _SMTPemail 'alex@net.ro', @InternalEmailAddress,'Important',@Mesaj

     

       FETCH NEXT FROM contract_cursor
       INTO @DataLivrarii, @InternalEmailAddress,@new_name
    END

    CLOSE contract_cursor
    DEALLOCATE contract_cursor
    GO

    cum vi se pare.....mai trebuie adaugat ceva....stiu ca se poate si mai bine? :)

    multumesc mult

    alex.

  •  08-28-2007, 7:09 AM 2573 in reply to 2568

    Re: Cursor - sql server 2000

    Cred ca in loc de job o solutie mai eleganta era cu notifcation services.aici.Iti defineai o aplicatie si evenimentul DATEDIFF(dd,@DataFinalizareContract,@GETDATE()) <= 4.Iti definesti canalul si deviceul(modul de notificare) care e mail,subscrieberii (userii la care vrei sa dai mailuri)apoi faci o aplicatie prin care subscrii la evenimentul asta.

    Mi se pare mai profy solutia asta vezi in bol la sql server notification services


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  08-28-2007, 7:10 AM 2574 in reply to 2573

    Re: Cursor - sql server 2000

    hops am imresia canu e in 2000 asa ceva Confused
    Secolul XXI ori va fi religios ori nu va fi deloc
  •  08-28-2007, 9:36 AM 2575 in reply to 2574

    Re: Cursor - sql server 2000

    crestinul:
    hops am imresia canu e in 2000 asa ceva Confused

    SQL Server 2000 Notification Services, Standard Edition 2.0 SP1

     

    Despre viitorul Notification Services: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2006061&SiteID=1 

     

     

  •  08-28-2007, 4:37 PM 2582 in reply to 2575

    Re: Cursor - sql server 2000

    eu stiam de ala din 2005Big Smile
    Secolul XXI ori va fi religios ori nu va fi deloc
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems