日期:2014-05-18  浏览次数:20612 次

麻烦的存储过程,提示“从字符串转换为 datetime 时发生语法错误”
各位朋友,小弟的存储过程如下,但调用的时候:出现如下的错误提示,请问该怎样解决,请各位朋友赐教,谢谢!!!
exec   test   @begin_date= '2007-9-1 ',   @end_date= '2007-9-3 '

错误提示:
消息   241,级别   16,状态   1,过程   test,第   6   行
从字符串转换为   datetime   时发生语法错误。


ALTER   procedure   [dbo].[test]
@begin_date   datetime,
@end_date   datetime
as
declare   @str   varchar(2000)
set   @str= 'select   isnull(employee.emp_id,sign_time.emp_id)   emp_id,
              emp_name,   isnull(employee.card_id,sign_time.card_id)   card_id,
              hire_date,   no_sign,sex,   principal,   depart_name,   clock_id,
              convert(varchar(16),sign_time,120)   sign_time,
  from  

                    (select   e.emp_id,e.emp_name,e.card_id,
                                            hire_date,
                                            Case   no_sign     WHEN   0   THEN   ' '要打卡 ' '   ELSE   ' '免卡 ' '   END   no_sign,
                                            Case   sex     WHEN   0   THEN   ' '男 ' '   ELSE   ' '女 ' '   END   sex,
                                            d.principal,
                                            d.depart_name   from   employee   e

                              left   outer   join

                                            depart   d  
                              on
                                          e.depart_id=d.depart_id)   employee,


                    (select   clock_id,   card_id,   emp_id,   sign_time   from   tmpTRecords     where   sign_time> = '+@begin_date+ '   and   sign_time <= '+@end_date+ ')sign_time

where
                    employee.emp_id=sign_time.emp_id '

exec   (@str)




------解决方案--------------------
ALTER procedure [dbo].[test]
@begin_date datetime,
@end_date datetime
as
declare @str varchar(2