SQL stored procedure datetime question

Hi i have a stored procddue please see attched

to execute the procedure i need to use

execute empcount 'Dec 1 2007', 'dec 31 2008'

the problem is the application that send the execute command want to use

exec empcount(2000-01-01 00:00:00.000000000,
2000-01-01 00:00:00.000000000)

can i tweak the procedure to accept these values?

--Declare Start and End variables (these can also be passed into a stored procedure)
DECLARE @startdate 	smalldatetime,
	@endDate   	smalldatetime
 
--this drops the hours and minutes and sets them to 00:00
Set @startdate  = convert(varchar,'Nov 1, 2008' ,111)
Set @endDate  = convert(varchar,'Dec 31 2008' ,111)
 
--Declare EnD Date tmp variable to be used in the loop
DECLARE @tmpEndDate	smalldatetime
--Declare tmp table to act as a temporary holding place for your data
DECLARE @tmpTable	TABLE(
			StartDate	smalldatetime,
			EndDate		smalldatetime,
			noemp 		integer)
--Set @startdate to beginning of month span
Set @startdate =  DATEADD(dd,-(DAY(DATEADD(m,1,@startdate))-1),@startdate)
--set @endDate to end of month span
Set @endDate =  DATEADD(dd, -DAY(DATEADD(m,1,@endDate)), DATEADD(m,1,@endDate))
 
--loop through each month
While @startdate < @endDate
BEGIN
         --set @tmpEndDate to last minute of month
	Set @tmpEndDate = dateadd(n,-1,dateadd(m,1,@startdate))
         --insert values in table
	Insert into @tmpTable(StartDate,EndDate,noemp) 
		Select @startdate as startdate, @tmpEndDate as enddate, NoEmployees as noemp 
		      from CTContracts 
		      Where Fromdate  <= @tmpEndDate And  EndDate >= @startdate
		      and LKContractTypeID = 8
         --increment @startdate 
	Set @startdate = dateadd(m,1,@startdate)
END
 
--Now you can do what you want with the results
Select * from @tmpTable
Select Min(StartDate) as StartDate, Max(EndDate) as EndDate, Sum(noemp) as noemp from @tmpTable

Open in new window

ac_davis2002Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

pierkyCommented:
Well,

this syntax is wrong
exec empcount(2000-01-01 00:00:00.000000000, 2000-01-01 00:00:00.000000000)

At least you have to remove "(" and ")" and add quotes to the date:

exec empcount '2000-01-01 00:00:00.000000000', '2000-01-01 00:00:00.000000000'

If you can run this command (and if input date is always in this format) you can change the stored-procedure in this way:

CREATE PROCEDURE empcount (
@strStart varchar(30),
@strStop varchar(30)
) AS
 
DECLARE @startdate 	smalldatetime
DECLARE @endDate   	smalldatetime
SET @startdate = CONVERT( datetime, LEFT( @strStart, 23 ), 121 )
SET @endDate = CONVERT( datetime, LEFT( @strStop, 23 ), 121 )
 
[...]

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
HengTimeCommented:
you could pass the parameters (the dates)  as nvarchar  and then convert them to datetime

have a look at this. its the convert syntax

http://msdn.microsoft.com/en-us/library/ms187928.aspx

the style you need I think would be 121 which is odbc canonical with millisecs
0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
if the parameter is already datetime (or smalldatetime), you don't need to convert them "again" to varchar or datetime!

>exec empcount(2000-01-01 00:00:00.000000000, 2000-01-01 00:00:00.000000000)
I must assume that it actually calls the proc like this:
exec empcount('2000-01-01 00:00:00.000000000', '2000-01-01 00:00:00.000000000')

in which case, if the parameter is datetime, it will accept it (smalldatetime might be a problem)
0
Determine the Perfect Price for Your IT Services

Do you wonder if your IT business is truly profitable or if you should raise your prices? Learn how to calculate your overhead burden with our free interactive tool and use it to determine the right price for your IT services. Download your free eBook now!

ac_davis2002Author Commented:
Hi chaps

pierky, i can remove thr brackets but I need to insert a quote
in otherwords I can send this
2000-01-01 00:00:00.000000000, 2000-01-01 00:00:00.000000000

but need a way of inserting quotes

'2000-01-01 00:00:00.000000000', '2000-01-01 00:00:00.000000000'
0
pierkyCommented:
The syntax

exec empcount 2000-01-01 00:00:00.000000000, 2000-01-01 00:00:00.000000000

is wrong, SQL server will not parse this command.
You need to change the way your application call the stored-procedure, adding quotes.
What's the language used to build the app? Do you have source code?
0
ac_davis2002Author Commented:
well actuall its cognos, I am calling a sql procedue from cognos. do you have any cognos knowledge?
0
pierkyCommented:
No, sorry!
0
ac_davis2002Author Commented:
no worries, thanks for your help anyway

I'll pass you the poinst as you answered my original question!
0
ac_davis2002Author Commented:
thnaks again!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.