Welcome to Sign in | Help
in Search

Procedura in sql

Last post 09-29-2008, 6:53 PM by B_gd_n[ ]Sahlean. 9 replies.
Sort Posts: Previous Next
  •  09-29-2008, 1:56 PM 5679

    Procedura in sql


    Am urmatoarea procedura :

    CREATE PROCEDURE uspGetLastIdOfAddedArticle(@ParentId INT) 
    AS BEGIN 
    SELECT TOP 1 TabId FROM dbo.Tabs  
     WHERE  
       ParentId=@ParentId and 
       IsDeleted='False' and  
       isnull(EndDate,getdate())>=getdate() and  
       isnull(StartDate,getdate())<=getdate()  
       ORDER BY TabId DESC 
    END 


    si doresc sa fac un select in care sa includ mai multe kestii dar sa nu contina id returnat de procedura aceasta. aveti idee cum as putea face folosind procedura ? sau trebuie sa modific procedura sa o fac functie :( ....
    am incercat asa :

    declare @x INT;
    set @x= exec uspGetLastIdOfAddedArticle 59
    print @x

    si asa
    declare @x INT;
    set @x= select TabId from exec uspGetLastIdOfAddedArticle 59
    print @x

    dar fara nici un rezultat :( .... alta idee ceva mai ingenios  ? ... singura care imi vine este sa modific procedura si sa o fac o functie ...
  •  09-29-2008, 2:02 PM 5680 in reply to 5679

    Re: Procedura in sql


    Marturisesc ca nu inteleg prea bine ce vrei,
    tebbaerty:

    doresc sa fac un select in care sa includ mai multe kestii dar sa nu contina id returnat de procedura aceasta

     dar iata un sql asemanator:

    declare #tbl table(x int)
    insert into  #tbl exec uspGetLastIdOfAddedArticle 59
    select * from #tbl


    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  09-29-2008, 2:02 PM 5681 in reply to 5679

    Re: Procedura in sql

    Incercati cu optiunea OUTPUT prin care indicati un parametru a carei valoare va fi ulterior folosita intr-un batch

    Citez din Books Online :

    "

    OUTPUT

    Indicates that the parameter is an output parameter. The value of this option can be returned to the calling EXECUTE statement. Use OUTPUT parameters to return values to the caller of the procedure. text, ntext, and image parameters cannot be used as OUTPUT parameters, unless the procedure is a CLR procedure. An output parameter that uses the OUTPUT keyword can be a cursor placeholder, unless the procedure is a CLR procedure.

    "


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  09-29-2008, 2:10 PM 5682 in reply to 5679

    Re: Procedura in sql

    Pentru răspunsul la întrebarea "Cum aş putea să folosesc datele returnate de o procedură?", vezi următorul articol:
    http://www.sommarskog.se/share_data.html

    În acest caz, este posibil să foloseşti INSERT-EXEC, dar cel mai simplu ar fi să o faci funcţie, astfel:

    CREATE FUNCTION uspGetLastIdOfAddedArticle(@ParentId INT, @CurrentDate DATETIME) 
    RETURNS TABLE AS RETURN
    SELECT TOP 1 TabId FROM dbo.Tabs  
    WHERE  
       ParentId=@ParentId and 
       IsDeleted='False' and  
       isnull(EndDate,@CurrentDate)>=@CurrentDate and  
       isnull(StartDate,@CurrentDate)<=@CurrentDate 
    ORDER BY TabId DESC 

    Singura problemă ar fi faptul că nu poţi folosi GETDATE() într-o funcţie, dar se rezolvă uşor trimiţând ca parametru valoarea datei curente.

    Răzvan
  •  09-29-2008, 3:19 PM 5685 in reply to 5679

    Re: Procedura in sql

    tebbaerty:

    Am urmatoarea procedura :

    CREATE PROCEDURE uspGetLastIdOfAddedArticle(@ParentId INT) 
    AS BEGIN 
    SELECT TOP 1 TabId FROM dbo.Tabs  
     WHERE  
       ParentId=@ParentId and 
       IsDeleted='False' and  
       isnull(EndDate,getdate())>=getdate() and  
       isnull(StartDate,getdate())<=getdate()  
       ORDER BY TabId DESC 
    END 


    si doresc sa fac un select in care sa includ mai multe kestii dar sa nu contina id returnat de procedura aceasta. aveti idee cum as putea face folosind procedura ? sau trebuie sa modific procedura sa o fac functie :( ....
    am incercat asa :

    declare @x INT;
    set @x= exec uspGetLastIdOfAddedArticle 59
    print @x

    si asa
    declare @x INT;
    set @x= select TabId from exec uspGetLastIdOfAddedArticle 59
    print @x

    dar fara nici un rezultat :( .... alta idee ceva mai ingenios  ? ... singura care imi vine este sa modific procedura si sa o fac o functie ...

    BOL is your best friend Wink

     

  •  09-29-2008, 3:26 PM 5686 in reply to 5682

    Re: Procedura in sql

    rsocol:
    Singura problemă ar fi faptul că nu poţi folosi GETDATE() într-o funcţie, dar se rezolvă uşor trimiţând ca parametru valoarea datei curente.


    Pe 2000 ! Pentru toate celelante există SQL200[5|8]:

    CREATE FUNCTION Varsta( @data_n DATETIME )
    RETURNS INT
    AS
    BEGIN
      DECLARE @ani INT
      SET @ani = DATEDIFF( yyyy , @data_n , GETDATE() )
      RETURN @ani
    END;
    GO

    SELECT dbo.Varsta( '1977-01-08' ) AS PestePrajit;
    GO

    CREATE FUNCTION uspGetLastIdOfAddedArticle(@ParentId INT)
    RETURNS INT
    BEGIN
      DECLARE @CurrentDate DATETIME
      SET @CurrentDate = GETDATE()
      
      RETURN
      (
      SELECT TOP 1 TabId FROM dbo.Tabs
      WHERE
       ParentId=@ParentId and
       IsDeleted='False' and
       isnull(EndDate,@CurrentDate)>=@CurrentDate and
       isnull(StartDate,@CurrentDate)<=@CurrentDate
       ORDER BY TabId DESC
      )
    END

  •  09-29-2008, 3:27 PM 5687 in reply to 5685

    Re: Procedura in sql

    Diana:
    ...BOL is your best friend Wink

    Pentru prieteni ... BULă !   Smile
  •  09-29-2008, 5:44 PM 5688 in reply to 5686

    Re: Procedura in sql

    ORDER BY inutil pentru ca exista TOP 1 ?

    http://rusanu.com
  •  09-29-2008, 6:32 PM 5689 in reply to 5688

    Re: Procedura in sql

    Bogdan, cum să fie inutil ORDER BY-ul dacă există TOP 1 ? ORDER BY-ul este pus acolo tocmai pentru că există TOP 1, adică să specifice că e vorba de primul dintr-un anumit punct de vedere, nu un rând oarecare.

    Din alt punct de vedere, ai dreptate cu GETDATE()-ul din funcţii... se pare că sunt cam prea obişnuit cu limitările lui SQL Server 2000...

    Răzvan
  •  09-29-2008, 6:53 PM 5690 in reply to 5688

    Re: Procedura in sql

    rremus:
    ORDER BY inutil pentru ca exista TOP 1 ?

    rsocol:
    Bogdan, cum să fie inutil ORDER BY-ul dacă există TOP 1 ?

    Neatentia Sleep ! Observatie e corecta desi ar merge si SELECT MAX(TabID) fara ORDER BY. Am citit pe diagonala ...
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems