SQL stored procedure datetime question

Posted on 2008-06-25
Last Modified: 2010-04-21
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


			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


         --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)



--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

Question by:ac_davis2002

Accepted Solution

pierky earned 500 total points
ID: 21864795

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:


@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


Expert Comment

ID: 21864809
you could pass the parameters (the dates)  as nvarchar  and then convert them to datetime

have a look at this. its the convert syntax

the style you need I think would be 121 which is odbc canonical with millisecs
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 21864994
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)

Author Comment

ID: 21865012
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'
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!


Expert Comment

ID: 21865264
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?

Author Comment

ID: 21865371
well actuall its cognos, I am calling a sql procedue from cognos. do you have any cognos knowledge?

Expert Comment

ID: 21865427
No, sorry!

Author Comment

ID: 21865514
no worries, thanks for your help anyway

I'll pass you the poinst as you answered my original question!

Author Closing Comment

ID: 31470522
thnaks again!

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

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

Let's review the features of new SQL Server 2012 (Denali CTP3). It listed as below: PERCENT_RANK(): PERCENT_RANK() function will returns the percentage value of rank of the values among its group. PERCENT_RANK() function value always in be…
Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
Via a live example, show how to shrink a transaction log file down to a reasonable size.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

862 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

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now