首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

麻烦的存储过程,提示“从字符串转换为 datetime 时发生语法异常”

2012-02-04 
麻烦的存储过程,提示“从字符串转换为 datetime 时发生语法错误”各位朋友,小弟的存储过程如下,但调用的时候

麻烦的存储过程,提示“从字符串转换为 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(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> = '+convert(varchar(23),@begin_date,121)+ ' and sign_time <= '+convert(varchar(23),@end_date,121)+ ')sign_time

where
employee.emp_id=sign_time.emp_id '

exec (@str)

[解决办法]
单纯来看,语句没有问题,要看看你的数据了
[解决办法]
存储过程中又执行字符串啊,见识过了。
你把小时,分钟,秒加上试下呢
[解决办法]
看你的数据类型才可以的

热点排行
Bad Request.