Solved

How to Set the Value of a Parameter Within in a Stored Procedure

Posted on 2009-04-07
6
181 Views
Last Modified: 2012-05-06
I need to set the value of @ToDate
Can I set the parameter value within the stored procedure statement instead of passing it into the stored procedure?

ALTER PROCEDURE [dbo].[usp_getWatchList]
      -- Add the parameters for the stored procedure here
      @ToDate datetime    
AS

@ToDate=(SELECT MAX(QuoteDate) FROM Table1 WHERE MarketID=1)
-- This does not work. How can I set the value of @ToDate ?

SELECT * FROM Table2
WHERE Table2.QuoteDate = @ToDate
0
Comment
Question by:Dovberman
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 28

Expert Comment

by:TextReport
ID: 24088049
You can etiher
SELECT @ToDate=(SELECT MAX(QuoteDate) FROM Table1 WHERE MarketID=1)
or
SET @ToDate=(SELECT MAX(QuoteDate) FROM Table1 WHERE MarketID=1)
Cheers, Andrew
0
 

Author Comment

by:Dovberman
ID: 24089104
I am not sure how to use this suggestion.

The SP usp_getWatchList shown in the code snippet compiles.

However,
exec usp_getWatchList
@UserID = 'BA275A68-9E77-4301-9D97-7CC7DFECDA0D',
@FromDate = '2009-01-23'  

displays the following error:

Msg 201, Level 16, State 4, Procedure usp_getWatchList, Line 0
Procedure or function 'usp_getWatchList' expects parameter '@ToDate', which was not supplied.


What am I missing?
thanks,

ALTER PROCEDURE [dbo].[usp_getWatchList]
	-- Add the parameters for the stored procedure here
	@UserID varchar(50), 
	@ToDate datetime,   
	@FromDate datetime 
 
AS
 
/* 
exec usp_getWatchList
@UserID = 'BA275A68-9E77-4301-9D97-7CC7DFECDA0D',
@ToDate = '2009-02-27', 
@FromDate = '2009-01-23' 
*/
 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
    -- Insert statements for procedure here
SET @ToDate=(SELECT MAX(QuoteDate) FROM DownLoadDates WHERE MarketID=1)
 
 
SELECT 
w.SymbolID
, s1.SymbolName
, sym.SecName
, w.MarketID
, mkt.MarketName 
, w.PickDate
, DATEDIFF(day, w.PickDate, GETDATE()) AS DaysonList 
, s1.ClosePrice AS PickPrice
, s2.ClosePrice AS CurrentPrice
, (SELECT ClosePrice FROM StockHist  
WHERE QuoteDate = @FromDate AND SymbolID = w.symbolID) AS StartPrice  
, s2.ClosePrice - s1.ClosePrice AS PriceChange   
, ((s2.ClosePrice - s1.ClosePrice) *100) /s1.ClosePrice AS PctChange
FROM Watchlist w INNER JOIN
   StockHist s1 ON w.SymbolID = s1.SymbolID AND w.PickDate = s1.QuoteDate INNER JOIN
   StockHist s2 ON w.SymbolID = s2.SymbolID AND s2.QuoteDate = @ToDate INNER JOIN 
   Symbol sym ON w.SymbolID = sym.SymbolID  INNER JOIN 
   Market mkt ON mkt.MarketID = sym.MarketID  
WHERE w.UserID=@UserID 
ORDER BY PriceChange DESC 
END

Open in new window

0
 
LVL 28

Expert Comment

by:TextReport
ID: 24089244
You have not passed a value for the parameter @ToDate as demonstrated in Line 12, Line 22 is not required, this would be used for an output parameter and the way you are rnning the code you should be passing the @ToDate
Cheers, Andrew
exec usp_getWatchList
@UserID = 'BA275A68-9E77-4301-9D97-7CC7DFECDA0D',
@ToDate = '2009-02-27', 
@FromDate = '2009-01-23'

Open in new window

0
Learn how to optimize MySQL for your business need

With the increasing importance of apps & networks in both business & personal interconnections, perfor. has become one of the key metrics of successful communication. This ebook is a hands-on business-case-driven guide to understanding MySQL query parameter tuning & database perf

 

Author Comment

by:Dovberman
ID: 24089595
My intention is not to pass the @ToDate but to declare and set the @ToDate within the Stored Procedure.

Is this possible?

0
 
LVL 28

Accepted Solution

by:
TextReport earned 250 total points
ID: 24089625
Yes remove it from the paramters section and change it to a DECLARE
Cheers, Andrew
ALTER PROCEDURE [dbo].[usp_getWatchList]
	-- Add the parameters for the stored procedure here
	@UserID varchar(50), 
	@FromDate datetime 
 
AS
DECLARE 	@ToDate datetime
 
/* 
exec usp_getWatchList
@UserID = 'BA275A68-9E77-4301-9D97-7CC7DFECDA0D',
@ToDate = '2009-02-27', 
@FromDate = '2009-01-23' 
*/
 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
    -- Insert statements for procedure here
SET @ToDate=(SELECT MAX(QuoteDate) FROM DownLoadDates WHERE MarketID=1)
 
 
SELECT 
w.SymbolID
, s1.SymbolName
, sym.SecName
, w.MarketID
, mkt.MarketName 
, w.PickDate
, DATEDIFF(day, w.PickDate, GETDATE()) AS DaysonList 
, s1.ClosePrice AS PickPrice
, s2.ClosePrice AS CurrentPrice
, (SELECT ClosePrice FROM StockHist  
WHERE QuoteDate = @FromDate AND SymbolID = w.symbolID) AS StartPrice  
, s2.ClosePrice - s1.ClosePrice AS PriceChange   
, ((s2.ClosePrice - s1.ClosePrice) *100) /s1.ClosePrice AS PctChange
FROM Watchlist w INNER JOIN
   StockHist s1 ON w.SymbolID = s1.SymbolID AND w.PickDate = s1.QuoteDate INNER JOIN
   StockHist s2 ON w.SymbolID = s2.SymbolID AND s2.QuoteDate = @ToDate INNER JOIN 
   Symbol sym ON w.SymbolID = sym.SymbolID  INNER JOIN 
   Market mkt ON mkt.MarketID = sym.MarketID  
WHERE w.UserID=@UserID 
ORDER BY PriceChange DESC 
END 
Open in New Window Select All 

Open in new window

0
 

Author Closing Comment

by:Dovberman
ID: 31567542
Just what I needed. Thanks,
0

Featured Post

Get proactive database performance tuning online

At Percona’s web store you can order full Percona Database Performance Audit in minutes. Find out the health of your database, and how to improve it. Pay online with a credit card. Improve your database performance now!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In database programming, custom sort order seems to be necessary quite often, at least in my experience and time here at EE. Within the realm of custom sorting is the sorting of numbers and text independently (i.e., treating the numbers as number…
As they say in love and is true in SQL: you can sum some Data some of the time, but you can't always aggregate all Data all the time! Introduction: By the end of this Article it is my intention to bring the meaning and value of the above quote to…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Suggested Courses

622 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question