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

|M| 存储过程出错:从字符串转换为 datetime 时发生语法错误。
CREATE   Procedure   Search(@OrderID   int,   @MemberID   int,   @TypeClass   nvarchar(8),   @MyDayBegin   datetime,   @MyDayEnd   datetime)
AS
Declare   @sql   nvarchar(1000)
Declare   @iWhere   nvarchar(1000)
Set   @sql= 'SELECT   *   FROM   Order '
Set   @iWhere= '   Where   1=1 '
if   @OrderID   <>   -1
Begin
Set   @iWhere=@iWhere   +   'And   OrderID   =   '   +   convert(nvarchar,@OrderID)
End
if   @MemberID   <>   -1
Begin
Set   @iWhere=@iWhere   +   'And   MemberID   =   '   +   convert(nvarchar,@MemberID)
End
if   @TypeClass   <>   ' '
Begin
Set   @iWhere=@iWhere   +   'And   TypeClass   =   ' ' '   +   @TypeClass   +   ' ' ' '
End
if   @MyDayBegin   <>   convert(datetime, '1900-1-1 ')
Begin
Set   @iWhere=@iWhere   +   '   And   DateDiff(d,MyDay, ' ' '   +     @MyDayBegin   +   ' ' ')   <=   0 '
End
if   @MyDayEnd   <>   convert(datetime, '1900-1-1 ')
Begin
Set   @iWhere=@iWhere   +   '   And   DateDiff(d,MyDay, ' ' '   +   @MyDayEnd   +   ' ' ')   > =0 '
End
Set   @sql=@sql   +   @iWhere
Execute   sp_executesql   @sql
GO
------------------------
提示:从字符串转换为   datetime   时发生语法错误。
还有上面我写的存储过程请大家忧化一下

谢谢


------解决方案--------------------
@MyDayBegin <> convert(datetime, '1900-1-1 ') 改成 @MyDayBegin <> '1900-1-1 '

@MyDayEnd <> convert(datetime, '1900-1-1 ') 改成 @MyDayEnd <> '1900-1-1 '

建议: <> 改成>
------解决方案--------------------
是传参数就报错了,还是执行存储过程的时候出错,如果是执行的时候才出错,执行到那行代码的时候出错?
------解决方案--------------------
添加print语句,调试一下就好了
或者使用VS自带的连接数据库的功能,可以进行断电调试的
------解决方案--------------------
UP下,给出详细的错误提示吧呵呵
------解决方案--------------------
没测试,先发一个

CREATE Procedure Search
(
@OrderID int,
@MemberID int,
@TypeClass nvarchar(8),
@MyDayBegin datetime,
@MyDayEnd datetime
)
AS
Declare @sql nvarchar(1000)
Declare @iWhere nvarchar(1000)
Set @sql= 'SELECT * FROM Order '
Set @iWhere= ' Where 1=1 '
if @OrderID <> -1
Begin
Set @iWhere = @iWhere + ' And OrderID = ' + convert(nvarchar,@OrderID)
End
if @MemberID <> -1
Begin
Set @iWhere = @iWhere + ' And MemberID = ' + convert(nvarchar,@MemberID)
End
if @TypeClass <> ' '
Begin
Set @iWhere = @iWhere + ' And TypeClass = ' ' ' + @TypeClass + ' ' ' '
End
if @MyDayBegin <> '1900-1-1 '
Begin
Set @iWhere=@iWhere + ' And DateDiff(d,MyDay, ' ' ' + Convert(nvarchar(20),@MyDayBegin) + ' ' ') <= 0 '