请各位大侠帮忙看看这个存储过程为什么会出错的
--Admin:lcl
--funtion:--查找已发信息
--date:2010-6-11
--
create PROC sms_searchsendsms
(
@ss_name VARCHAR(50)=NULL,
@ss_mobile VARCHAR(50)=NULL,
@ss_content VARCHAR(600)=NULL,
@starsendtime datetime,
@endsendtime datetime,
@ss_flag VARCHAR(30)=NULL
)
AS
DECLARE @string VARCHAR(100)
IF(LEN(@ss_name)>0)
BEGIN
IF @string IS NULL
SET @string = 'select * from smssend where ss_name = '''+@ss_name+''''
END
IF(LEN(@ss_mobile)>0)
BEGIN 
IF @string IS NULL
SET @string = 'select * from smssend where ss_mobile = '''+@ss_mobile+''''
ELSE 
SET @string = @string +'and ss_mobile ='''+@ss_mobile+''''
END
IF ( LEN(@ss_content)>0)
BEGIN
IF @string IS NULL
SET @string=' select * from smssend where ss_content like ''%' + @ss_content + '%'''
ELSE
SET @string=@string +' and ss_content like ''' + @ss_content + '%'''
END
IF ((LEN(@starsendtime) >0) or (LEN(@endsendtime) >0))
BEGIN
IF @string IS NULL
set @string='select * from smssend where ss_time between'''+@starsendtime+'''and'''+@endsendtime+''''
ELSE
SET @string=@string +' and ss_time between'''+@starsendtime+'''and'''+@endsendtime+''''
END
IF (LEN(@ss_flag) >0 )
BEGIN
IF @string IS NULL
SET @string=' select * from smssend where ss_flag= '''+ @ss_flag + ''''
ELSE
SET @string=@string +' and ss_flag = '''+ @ss_flag+''''
END EXEC( @string)
我使用了下面语句进行测试:exec sms_searchsendsms 'q','q','q','2011-4-1 12:59:29','2011-4-1 12:59:29','q'
报错是:消息 241,级别 16,状态 1,过程 sms_searchsendsms,第 34 行
从字符串向 datetime 转换时失败。

解决方案 »

  1.   

    自己找到答案了把那个时间段那里修改下: 就行了
    IF (datediff(day,@starsendtime,@endsendtime)>0)
    BEGIN
    IF @string IS NULL
    --set @string='00'
     --select * from dbo.smssend where ss_time between @starsendtime and @endsendtime
    set @string='select * from smssend where ss_time between'+char(39)+convert(nvarchar,@starsendtime)+char(39)+'and'+char(39)+convert(nvarchar,@endsendtime)+char(39)+''
    ELSE
    SET @string=@string +'and(ss_time between'+char(39)+convert(nvarchar,@starsendtime)+char(39)+'and'+char(39)+convert(nvarchar,@endsendtime)+char(39)+')'
    END因为:时间不能当成是字符串字符串+ 是连接 ,字符串和时间不能直接连接的 。只能是先将时间转化成字符串      char(39)就表示单引号