Maintaining Variable After EXEC

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Chip Mayan

    Maintaining Variable After EXEC

    Hello,

    I am fairly new at stored procedures. I have created some that will
    go through a table and return a start date and an end date that is
    dependent upon the fiscal period you want, but I then need to use
    those dates in another stored procedure to retrieve the information I
    need. My stored procedure looks like this.

    =============== =============== =============== =============== ==========

    CREATE PROCEDURE dbo.R920ExtTota l
    @MthsBack Decimal OUTPUT
    AS

    DECLARE @sSQL AS NVARCHAR(255), @StartDate as SMALLDATETIME, @EndDate
    as SMALLDATETIME

    Exec @StartDate = GetMthStart @MthsBack

    Exec @EndDate = GetMthEnd @MthsBack

    SET @sSQL = 'Select count(extension ) as Total From r920f00 Where
    ([date] BETWEEN "' +
    CONVERT(nvarcha r, @StartDate) +
    '" and "' +
    CONVERT(nvarcha r, @EndDate) +
    '")'

    Select @sSQL

    EXEC (@sSQL)

    Return
    GO

    =============== =============== =============== =============== =====

    The problem is my variables @StartDate and @EndDate do not retain
    their values after the EXEC statement and revert to 01/01/1900. How
    can I get around this problem?

    Thanks!!!!

    Chip
  • Steve Jorgensen

    #2
    Re: Maintaining Variable After EXEC

    Variables are only available in the scope within which they are declared. If
    you need to move values out of a stored procedure, you must use output
    parameters for all of them. Also, why are you building dynamic SQL in your
    procedure? You can use the variables directly in SQL queries - there is no
    need to convert them to strings, and insert them into a SQL string.

    On 6 Jan 2004 11:05:01 -0800, cmayan@leslieco ntrols.com (Chip Mayan) wrote:
    [color=blue]
    >Hello,
    >
    >I am fairly new at stored procedures. I have created some that will
    >go through a table and return a start date and an end date that is
    >dependent upon the fiscal period you want, but I then need to use
    >those dates in another stored procedure to retrieve the information I
    >need. My stored procedure looks like this.
    >
    >============== =============== =============== =============== ===========
    >
    >CREATE PROCEDURE dbo.R920ExtTota l
    >@MthsBack Decimal OUTPUT
    >AS
    >
    >DECLARE @sSQL AS NVARCHAR(255), @StartDate as SMALLDATETIME, @EndDate
    >as SMALLDATETIME
    >
    >Exec @StartDate = GetMthStart @MthsBack
    >
    >Exec @EndDate = GetMthEnd @MthsBack
    >
    >SET @sSQL = 'Select count(extension ) as Total From r920f00 Where
    >([date] BETWEEN "' +
    > CONVERT(nvarcha r, @StartDate) +
    > '" and "' +
    > CONVERT(nvarcha r, @EndDate) +
    > '")'
    >
    >Select @sSQL
    >
    >EXEC (@sSQL)
    >
    >Return
    >GO
    >
    >============== =============== =============== =============== ======
    >
    >The problem is my variables @StartDate and @EndDate do not retain
    >their values after the EXEC statement and revert to 01/01/1900. How
    >can I get around this problem?
    >
    >Thanks!!!!
    >
    >Chip[/color]

    Comment

    • Erland Sommarskog

      #3
      Re: Maintaining Variable After EXEC

      Chip Mayan (cmayan@lesliec ontrols.com) writes:[color=blue]
      > I am fairly new at stored procedures. I have created some that will
      > go through a table and return a start date and an end date that is
      > dependent upon the fiscal period you want, but I then need to use
      > those dates in another stored procedure to retrieve the information I
      > need. My stored procedure looks like this.
      >
      >============== =============== =============== =============== ===========
      >
      > CREATE PROCEDURE dbo.R920ExtTota l
      > @MthsBack Decimal OUTPUT
      > AS
      >
      > DECLARE @sSQL AS NVARCHAR(255), @StartDate as SMALLDATETIME, @EndDate
      > as SMALLDATETIME
      >
      > Exec @StartDate = GetMthStart @MthsBack
      >
      > Exec @EndDate = GetMthEnd @MthsBack
      >
      > SET @sSQL = 'Select count(extension ) as Total From r920f00 Where
      > ([date] BETWEEN "' +
      > CONVERT(nvarcha r, @StartDate) +
      > '" and "' +
      > CONVERT(nvarcha r, @EndDate) +
      > '")'
      >
      > Select @sSQL
      >
      > EXEC (@sSQL)
      >
      > Return
      > GO[/color]

      I'm afraid that there are a couple of errors or strange things in this
      procedure.

      First: there is absolutely no reason to use dynamic SQL here. Just write:

      SELKCT count(extension ) AS Total
      FROM r920f00
      WHERE [date] BETWEEN @StartDate AND @EndDate

      Second: the calls to set @StartDate and @EndDate looks funny. If
      GetMthStart and GetMthEnd are user-defined functions it would be alright,
      but you indicated that they were stored procedures. The return value from
      a stored procedure is always an integer value, so you cannot return a
      date here. And I would strongly recommend you to use return values solely
      for indication of success/failure (with 0 meaning success, and about
      everything else meaning failure.) So you would have to make the output
      parameters:

      EXEC GetMthStart @MthsBack, @StartDate OUTPUT

      Third: the @MthsBack parameter is declared as output, but you never assign
      it any value, you only seem to use it for input.

      --
      Erland Sommarskog, SQL Server MVP, sommar@algonet. se

      Books Online for SQL Server SP3 at
      SQL Server 2025 redefines what's possible for enterprise data. With developer-first features and integration with analytics and AI models, SQL Server 2025 accelerates AI innovation using the data you already have.

      Comment

      Working...